GCC Code Coverage Report


Directory: ./
File: strings/ctype-utf8.cc
Date: 2022-12-06 21:40:42
Exec Total Coverage
Lines: 647 704 91.9%
Branches: 482 642 75.1%

Line Branch Exec Source
1 /* Copyright (c) 2000, 2022, Oracle and/or its affiliates.
2
3 This library is free software; you can redistribute it and/or
4 modify it under the terms of the GNU Library General Public
5 License, version 2.0, as published by the Free Software Foundation.
6
7 This library is also distributed with certain software (including
8 but not limited to OpenSSL) that is licensed under separate terms,
9 as designated in a particular file or component or in included license
10 documentation. The authors of MySQL hereby grant you an additional
11 permission to link the library and your derivative works with the
12 separately licensed software that they have included with MySQL.
13
14 Without limiting anything contained in the foregoing, this file,
15 which is part of C Driver for MySQL (Connector/C), is also subject to the
16 Universal FOSS Exception, version 1.0, a copy of which can be found at
17 http://oss.oracle.com/licenses/universal-foss-exception.
18
19 This library is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 Library General Public License, version 2.0, for more details.
23
24 You should have received a copy of the GNU Library General Public
25 License along with this library; if not, write to the Free
26 Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
27 MA 02110-1301 USA */
28
29 // UTF-8, as defined in RFC 2279.
30
31 #include "my_config.h"
32
33 #include <assert.h>
34 #include <errno.h>
35 #include <string.h>
36 #include <sys/types.h>
37 #include <algorithm>
38 #include <type_traits>
39
40 #include "m_ctype.h"
41 #include "my_byteorder.h"
42 #include "my_compiler.h"
43
44 #include "my_inttypes.h"
45 #include "my_macros.h"
46 #include "my_uctype.h" // IWYU pragma: keep
47 #include "strings/mb_wc.h"
48
49 #define MY_UTF8MB4_GENERAL_CI MY_UTF8MB4 "_general_ci"
50 #define MY_UTF8MB4_BIN MY_UTF8MB4 "_bin"
51
52 using std::is_signed;
53
54
2/2
✓ Branch 0 taken 219597359 times.
✓ Branch 1 taken 17841658318 times.
18061255677 static inline int my_valid_mbcharlen_utf8mb3(const uchar *s, const uchar *e) {
55 my_wc_t wc; // Ignored.
56 18061255677 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/true, /*SUPPORT_MB4=*/false>(
57 18061255677 &wc, s, e);
58 }
59
60 static const MY_UNICASE_CHARACTER plane00[] = {
61 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001},
62 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003},
63 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005},
64 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007},
65 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009},
66 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B},
67 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D},
68 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F},
69 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011},
70 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013},
71 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015},
72 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017},
73 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019},
74 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B},
75 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D},
76 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F},
77 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021},
78 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023},
79 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025},
80 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027},
81 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029},
82 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B},
83 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D},
84 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F},
85 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031},
86 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033},
87 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035},
88 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037},
89 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039},
90 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B},
91 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D},
92 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F},
93 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041},
94 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
95 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
96 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
97 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
98 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
99 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
100 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
101 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
102 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
103 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
104 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
105 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
106 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B},
107 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D},
108 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F},
109 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041},
110 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
111 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
112 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
113 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
114 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
115 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
116 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
117 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
118 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
119 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
120 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
121 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
122 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B},
123 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D},
124 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F},
125 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081},
126 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083},
127 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085},
128 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087},
129 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089},
130 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B},
131 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D},
132 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F},
133 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091},
134 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093},
135 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095},
136 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097},
137 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099},
138 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B},
139 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D},
140 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F},
141 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1},
142 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3},
143 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5},
144 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7},
145 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9},
146 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB},
147 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD},
148 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF},
149 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1},
150 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3},
151 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C},
152 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7},
153 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9},
154 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB},
155 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD},
156 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF},
157 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
158 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
159 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
160 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
161 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
162 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
163 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
164 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
165 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
166 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
167 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
168 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7},
169 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
170 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
171 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
172 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x0053},
173 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
174 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
175 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
176 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
177 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
178 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
179 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
180 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
181 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
182 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
183 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
184 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7},
185 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
186 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
187 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
188 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059}};
189
190 /*
191 Almost similar to plane00, but maps sorting order
192 for U+00DF to 0x00DF instead of 0x0053.
193 */
194 static const MY_UNICASE_CHARACTER plane00_mysql500[] = {
195 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001},
196 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003},
197 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005},
198 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007},
199 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009},
200 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B},
201 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D},
202 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F},
203 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011},
204 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013},
205 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015},
206 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017},
207 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019},
208 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B},
209 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D},
210 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F},
211 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021},
212 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023},
213 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025},
214 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027},
215 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029},
216 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B},
217 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D},
218 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F},
219 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031},
220 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033},
221 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035},
222 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037},
223 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039},
224 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B},
225 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D},
226 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F},
227 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041},
228 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
229 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
230 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
231 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
232 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
233 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
234 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
235 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
236 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
237 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
238 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
239 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
240 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B},
241 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D},
242 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F},
243 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041},
244 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
245 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
246 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
247 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049},
248 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
249 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
250 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
251 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
252 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
253 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
254 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
255 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
256 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B},
257 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D},
258 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F},
259 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081},
260 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083},
261 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085},
262 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087},
263 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089},
264 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B},
265 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D},
266 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F},
267 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091},
268 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093},
269 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095},
270 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097},
271 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099},
272 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B},
273 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D},
274 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F},
275 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1},
276 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3},
277 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5},
278 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7},
279 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9},
280 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB},
281 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD},
282 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF},
283 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1},
284 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3},
285 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C},
286 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7},
287 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9},
288 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB},
289 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD},
290 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF},
291 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
292 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
293 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
294 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
295 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
296 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
297 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
298 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
299 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
300 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
301 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
302 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7},
303 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
304 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
305 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
306 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x00DF},
307 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
308 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
309 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
310 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
311 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
312 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
313 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
314 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
315 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
316 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
317 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
318 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7},
319 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
320 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
321 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
322 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059}};
323
324 static const MY_UNICASE_CHARACTER plane01[] = {
325 {0x0100, 0x0101, 0x0041}, {0x0100, 0x0101, 0x0041},
326 {0x0102, 0x0103, 0x0041}, {0x0102, 0x0103, 0x0041},
327 {0x0104, 0x0105, 0x0041}, {0x0104, 0x0105, 0x0041},
328 {0x0106, 0x0107, 0x0043}, {0x0106, 0x0107, 0x0043},
329 {0x0108, 0x0109, 0x0043}, {0x0108, 0x0109, 0x0043},
330 {0x010A, 0x010B, 0x0043}, {0x010A, 0x010B, 0x0043},
331 {0x010C, 0x010D, 0x0043}, {0x010C, 0x010D, 0x0043},
332 {0x010E, 0x010F, 0x0044}, {0x010E, 0x010F, 0x0044},
333 {0x0110, 0x0111, 0x0110}, {0x0110, 0x0111, 0x0110},
334 {0x0112, 0x0113, 0x0045}, {0x0112, 0x0113, 0x0045},
335 {0x0114, 0x0115, 0x0045}, {0x0114, 0x0115, 0x0045},
336 {0x0116, 0x0117, 0x0045}, {0x0116, 0x0117, 0x0045},
337 {0x0118, 0x0119, 0x0045}, {0x0118, 0x0119, 0x0045},
338 {0x011A, 0x011B, 0x0045}, {0x011A, 0x011B, 0x0045},
339 {0x011C, 0x011D, 0x0047}, {0x011C, 0x011D, 0x0047},
340 {0x011E, 0x011F, 0x0047}, {0x011E, 0x011F, 0x0047},
341 {0x0120, 0x0121, 0x0047}, {0x0120, 0x0121, 0x0047},
342 {0x0122, 0x0123, 0x0047}, {0x0122, 0x0123, 0x0047},
343 {0x0124, 0x0125, 0x0048}, {0x0124, 0x0125, 0x0048},
344 {0x0126, 0x0127, 0x0126}, {0x0126, 0x0127, 0x0126},
345 {0x0128, 0x0129, 0x0049}, {0x0128, 0x0129, 0x0049},
346 {0x012A, 0x012B, 0x0049}, {0x012A, 0x012B, 0x0049},
347 {0x012C, 0x012D, 0x0049}, {0x012C, 0x012D, 0x0049},
348 {0x012E, 0x012F, 0x0049}, {0x012E, 0x012F, 0x0049},
349 {0x0130, 0x0069, 0x0049}, {0x0049, 0x0131, 0x0049},
350 {0x0132, 0x0133, 0x0132}, {0x0132, 0x0133, 0x0132},
351 {0x0134, 0x0135, 0x004A}, {0x0134, 0x0135, 0x004A},
352 {0x0136, 0x0137, 0x004B}, {0x0136, 0x0137, 0x004B},
353 {0x0138, 0x0138, 0x0138}, {0x0139, 0x013A, 0x004C},
354 {0x0139, 0x013A, 0x004C}, {0x013B, 0x013C, 0x004C},
355 {0x013B, 0x013C, 0x004C}, {0x013D, 0x013E, 0x004C},
356 {0x013D, 0x013E, 0x004C}, {0x013F, 0x0140, 0x013F},
357 {0x013F, 0x0140, 0x013F}, {0x0141, 0x0142, 0x0141},
358 {0x0141, 0x0142, 0x0141}, {0x0143, 0x0144, 0x004E},
359 {0x0143, 0x0144, 0x004E}, {0x0145, 0x0146, 0x004E},
360 {0x0145, 0x0146, 0x004E}, {0x0147, 0x0148, 0x004E},
361 {0x0147, 0x0148, 0x004E}, {0x0149, 0x0149, 0x0149},
362 {0x014A, 0x014B, 0x014A}, {0x014A, 0x014B, 0x014A},
363 {0x014C, 0x014D, 0x004F}, {0x014C, 0x014D, 0x004F},
364 {0x014E, 0x014F, 0x004F}, {0x014E, 0x014F, 0x004F},
365 {0x0150, 0x0151, 0x004F}, {0x0150, 0x0151, 0x004F},
366 {0x0152, 0x0153, 0x0152}, {0x0152, 0x0153, 0x0152},
367 {0x0154, 0x0155, 0x0052}, {0x0154, 0x0155, 0x0052},
368 {0x0156, 0x0157, 0x0052}, {0x0156, 0x0157, 0x0052},
369 {0x0158, 0x0159, 0x0052}, {0x0158, 0x0159, 0x0052},
370 {0x015A, 0x015B, 0x0053}, {0x015A, 0x015B, 0x0053},
371 {0x015C, 0x015D, 0x0053}, {0x015C, 0x015D, 0x0053},
372 {0x015E, 0x015F, 0x0053}, {0x015E, 0x015F, 0x0053},
373 {0x0160, 0x0161, 0x0053}, {0x0160, 0x0161, 0x0053},
374 {0x0162, 0x0163, 0x0054}, {0x0162, 0x0163, 0x0054},
375 {0x0164, 0x0165, 0x0054}, {0x0164, 0x0165, 0x0054},
376 {0x0166, 0x0167, 0x0166}, {0x0166, 0x0167, 0x0166},
377 {0x0168, 0x0169, 0x0055}, {0x0168, 0x0169, 0x0055},
378 {0x016A, 0x016B, 0x0055}, {0x016A, 0x016B, 0x0055},
379 {0x016C, 0x016D, 0x0055}, {0x016C, 0x016D, 0x0055},
380 {0x016E, 0x016F, 0x0055}, {0x016E, 0x016F, 0x0055},
381 {0x0170, 0x0171, 0x0055}, {0x0170, 0x0171, 0x0055},
382 {0x0172, 0x0173, 0x0055}, {0x0172, 0x0173, 0x0055},
383 {0x0174, 0x0175, 0x0057}, {0x0174, 0x0175, 0x0057},
384 {0x0176, 0x0177, 0x0059}, {0x0176, 0x0177, 0x0059},
385 {0x0178, 0x00FF, 0x0059}, {0x0179, 0x017A, 0x005A},
386 {0x0179, 0x017A, 0x005A}, {0x017B, 0x017C, 0x005A},
387 {0x017B, 0x017C, 0x005A}, {0x017D, 0x017E, 0x005A},
388 {0x017D, 0x017E, 0x005A}, {0x0053, 0x017F, 0x0053},
389 {0x0180, 0x0180, 0x0180}, {0x0181, 0x0253, 0x0181},
390 {0x0182, 0x0183, 0x0182}, {0x0182, 0x0183, 0x0182},
391 {0x0184, 0x0185, 0x0184}, {0x0184, 0x0185, 0x0184},
392 {0x0186, 0x0254, 0x0186}, {0x0187, 0x0188, 0x0187},
393 {0x0187, 0x0188, 0x0187}, {0x0189, 0x0256, 0x0189},
394 {0x018A, 0x0257, 0x018A}, {0x018B, 0x018C, 0x018B},
395 {0x018B, 0x018C, 0x018B}, {0x018D, 0x018D, 0x018D},
396 {0x018E, 0x01DD, 0x018E}, {0x018F, 0x0259, 0x018F},
397 {0x0190, 0x025B, 0x0190}, {0x0191, 0x0192, 0x0191},
398 {0x0191, 0x0192, 0x0191}, {0x0193, 0x0260, 0x0193},
399 {0x0194, 0x0263, 0x0194}, {0x01F6, 0x0195, 0x01F6},
400 {0x0196, 0x0269, 0x0196}, {0x0197, 0x0268, 0x0197},
401 {0x0198, 0x0199, 0x0198}, {0x0198, 0x0199, 0x0198},
402 {0x019A, 0x019A, 0x019A}, {0x019B, 0x019B, 0x019B},
403 {0x019C, 0x026F, 0x019C}, {0x019D, 0x0272, 0x019D},
404 {0x019E, 0x019E, 0x019E}, {0x019F, 0x0275, 0x019F},
405 {0x01A0, 0x01A1, 0x004F}, {0x01A0, 0x01A1, 0x004F},
406 {0x01A2, 0x01A3, 0x01A2}, {0x01A2, 0x01A3, 0x01A2},
407 {0x01A4, 0x01A5, 0x01A4}, {0x01A4, 0x01A5, 0x01A4},
408 {0x01A6, 0x0280, 0x01A6}, {0x01A7, 0x01A8, 0x01A7},
409 {0x01A7, 0x01A8, 0x01A7}, {0x01A9, 0x0283, 0x01A9},
410 {0x01AA, 0x01AA, 0x01AA}, {0x01AB, 0x01AB, 0x01AB},
411 {0x01AC, 0x01AD, 0x01AC}, {0x01AC, 0x01AD, 0x01AC},
412 {0x01AE, 0x0288, 0x01AE}, {0x01AF, 0x01B0, 0x0055},
413 {0x01AF, 0x01B0, 0x0055}, {0x01B1, 0x028A, 0x01B1},
414 {0x01B2, 0x028B, 0x01B2}, {0x01B3, 0x01B4, 0x01B3},
415 {0x01B3, 0x01B4, 0x01B3}, {0x01B5, 0x01B6, 0x01B5},
416 {0x01B5, 0x01B6, 0x01B5}, {0x01B7, 0x0292, 0x01B7},
417 {0x01B8, 0x01B9, 0x01B8}, {0x01B8, 0x01B9, 0x01B8},
418 {0x01BA, 0x01BA, 0x01BA}, {0x01BB, 0x01BB, 0x01BB},
419 {0x01BC, 0x01BD, 0x01BC}, {0x01BC, 0x01BD, 0x01BC},
420 {0x01BE, 0x01BE, 0x01BE}, {0x01F7, 0x01BF, 0x01F7},
421 {0x01C0, 0x01C0, 0x01C0}, {0x01C1, 0x01C1, 0x01C1},
422 {0x01C2, 0x01C2, 0x01C2}, {0x01C3, 0x01C3, 0x01C3},
423 {0x01C4, 0x01C6, 0x01C4}, {0x01C4, 0x01C6, 0x01C4},
424 {0x01C4, 0x01C6, 0x01C4}, {0x01C7, 0x01C9, 0x01C7},
425 {0x01C7, 0x01C9, 0x01C7}, {0x01C7, 0x01C9, 0x01C7},
426 {0x01CA, 0x01CC, 0x01CA}, {0x01CA, 0x01CC, 0x01CA},
427 {0x01CA, 0x01CC, 0x01CA}, {0x01CD, 0x01CE, 0x0041},
428 {0x01CD, 0x01CE, 0x0041}, {0x01CF, 0x01D0, 0x0049},
429 {0x01CF, 0x01D0, 0x0049}, {0x01D1, 0x01D2, 0x004F},
430 {0x01D1, 0x01D2, 0x004F}, {0x01D3, 0x01D4, 0x0055},
431 {0x01D3, 0x01D4, 0x0055}, {0x01D5, 0x01D6, 0x0055},
432 {0x01D5, 0x01D6, 0x0055}, {0x01D7, 0x01D8, 0x0055},
433 {0x01D7, 0x01D8, 0x0055}, {0x01D9, 0x01DA, 0x0055},
434 {0x01D9, 0x01DA, 0x0055}, {0x01DB, 0x01DC, 0x0055},
435 {0x01DB, 0x01DC, 0x0055}, {0x018E, 0x01DD, 0x018E},
436 {0x01DE, 0x01DF, 0x0041}, {0x01DE, 0x01DF, 0x0041},
437 {0x01E0, 0x01E1, 0x0041}, {0x01E0, 0x01E1, 0x0041},
438 {0x01E2, 0x01E3, 0x00C6}, {0x01E2, 0x01E3, 0x00C6},
439 {0x01E4, 0x01E5, 0x01E4}, {0x01E4, 0x01E5, 0x01E4},
440 {0x01E6, 0x01E7, 0x0047}, {0x01E6, 0x01E7, 0x0047},
441 {0x01E8, 0x01E9, 0x004B}, {0x01E8, 0x01E9, 0x004B},
442 {0x01EA, 0x01EB, 0x004F}, {0x01EA, 0x01EB, 0x004F},
443 {0x01EC, 0x01ED, 0x004F}, {0x01EC, 0x01ED, 0x004F},
444 {0x01EE, 0x01EF, 0x01B7}, {0x01EE, 0x01EF, 0x01B7},
445 {0x01F0, 0x01F0, 0x004A}, {0x01F1, 0x01F3, 0x01F1},
446 {0x01F1, 0x01F3, 0x01F1}, {0x01F1, 0x01F3, 0x01F1},
447 {0x01F4, 0x01F5, 0x0047}, {0x01F4, 0x01F5, 0x0047},
448 {0x01F6, 0x0195, 0x01F6}, {0x01F7, 0x01BF, 0x01F7},
449 {0x01F8, 0x01F9, 0x004E}, {0x01F8, 0x01F9, 0x004E},
450 {0x01FA, 0x01FB, 0x0041}, {0x01FA, 0x01FB, 0x0041},
451 {0x01FC, 0x01FD, 0x00C6}, {0x01FC, 0x01FD, 0x00C6},
452 {0x01FE, 0x01FF, 0x00D8}, {0x01FE, 0x01FF, 0x00D8}};
453
454 static const MY_UNICASE_CHARACTER plane02[] = {
455 {0x0200, 0x0201, 0x0041}, {0x0200, 0x0201, 0x0041},
456 {0x0202, 0x0203, 0x0041}, {0x0202, 0x0203, 0x0041},
457 {0x0204, 0x0205, 0x0045}, {0x0204, 0x0205, 0x0045},
458 {0x0206, 0x0207, 0x0045}, {0x0206, 0x0207, 0x0045},
459 {0x0208, 0x0209, 0x0049}, {0x0208, 0x0209, 0x0049},
460 {0x020A, 0x020B, 0x0049}, {0x020A, 0x020B, 0x0049},
461 {0x020C, 0x020D, 0x004F}, {0x020C, 0x020D, 0x004F},
462 {0x020E, 0x020F, 0x004F}, {0x020E, 0x020F, 0x004F},
463 {0x0210, 0x0211, 0x0052}, {0x0210, 0x0211, 0x0052},
464 {0x0212, 0x0213, 0x0052}, {0x0212, 0x0213, 0x0052},
465 {0x0214, 0x0215, 0x0055}, {0x0214, 0x0215, 0x0055},
466 {0x0216, 0x0217, 0x0055}, {0x0216, 0x0217, 0x0055},
467 {0x0218, 0x0219, 0x0053}, {0x0218, 0x0219, 0x0053},
468 {0x021A, 0x021B, 0x0054}, {0x021A, 0x021B, 0x0054},
469 {0x021C, 0x021D, 0x021C}, {0x021C, 0x021D, 0x021C},
470 {0x021E, 0x021F, 0x0048}, {0x021E, 0x021F, 0x0048},
471 {0x0220, 0x0220, 0x0220}, {0x0221, 0x0221, 0x0221},
472 {0x0222, 0x0223, 0x0222}, {0x0222, 0x0223, 0x0222},
473 {0x0224, 0x0225, 0x0224}, {0x0224, 0x0225, 0x0224},
474 {0x0226, 0x0227, 0x0041}, {0x0226, 0x0227, 0x0041},
475 {0x0228, 0x0229, 0x0045}, {0x0228, 0x0229, 0x0045},
476 {0x022A, 0x022B, 0x004F}, {0x022A, 0x022B, 0x004F},
477 {0x022C, 0x022D, 0x004F}, {0x022C, 0x022D, 0x004F},
478 {0x022E, 0x022F, 0x004F}, {0x022E, 0x022F, 0x004F},
479 {0x0230, 0x0231, 0x004F}, {0x0230, 0x0231, 0x004F},
480 {0x0232, 0x0233, 0x0059}, {0x0232, 0x0233, 0x0059},
481 {0x0234, 0x0234, 0x0234}, {0x0235, 0x0235, 0x0235},
482 {0x0236, 0x0236, 0x0236}, {0x0237, 0x0237, 0x0237},
483 {0x0238, 0x0238, 0x0238}, {0x0239, 0x0239, 0x0239},
484 {0x023A, 0x023A, 0x023A}, {0x023B, 0x023B, 0x023B},
485 {0x023C, 0x023C, 0x023C}, {0x023D, 0x023D, 0x023D},
486 {0x023E, 0x023E, 0x023E}, {0x023F, 0x023F, 0x023F},
487 {0x0240, 0x0240, 0x0240}, {0x0241, 0x0241, 0x0241},
488 {0x0242, 0x0242, 0x0242}, {0x0243, 0x0243, 0x0243},
489 {0x0244, 0x0244, 0x0244}, {0x0245, 0x0245, 0x0245},
490 {0x0246, 0x0246, 0x0246}, {0x0247, 0x0247, 0x0247},
491 {0x0248, 0x0248, 0x0248}, {0x0249, 0x0249, 0x0249},
492 {0x024A, 0x024A, 0x024A}, {0x024B, 0x024B, 0x024B},
493 {0x024C, 0x024C, 0x024C}, {0x024D, 0x024D, 0x024D},
494 {0x024E, 0x024E, 0x024E}, {0x024F, 0x024F, 0x024F},
495 {0x0250, 0x0250, 0x0250}, {0x0251, 0x0251, 0x0251},
496 {0x0252, 0x0252, 0x0252}, {0x0181, 0x0253, 0x0181},
497 {0x0186, 0x0254, 0x0186}, {0x0255, 0x0255, 0x0255},
498 {0x0189, 0x0256, 0x0189}, {0x018A, 0x0257, 0x018A},
499 {0x0258, 0x0258, 0x0258}, {0x018F, 0x0259, 0x018F},
500 {0x025A, 0x025A, 0x025A}, {0x0190, 0x025B, 0x0190},
501 {0x025C, 0x025C, 0x025C}, {0x025D, 0x025D, 0x025D},
502 {0x025E, 0x025E, 0x025E}, {0x025F, 0x025F, 0x025F},
503 {0x0193, 0x0260, 0x0193}, {0x0261, 0x0261, 0x0261},
504 {0x0262, 0x0262, 0x0262}, {0x0194, 0x0263, 0x0194},
505 {0x0264, 0x0264, 0x0264}, {0x0265, 0x0265, 0x0265},
506 {0x0266, 0x0266, 0x0266}, {0x0267, 0x0267, 0x0267},
507 {0x0197, 0x0268, 0x0197}, {0x0196, 0x0269, 0x0196},
508 {0x026A, 0x026A, 0x026A}, {0x026B, 0x026B, 0x026B},
509 {0x026C, 0x026C, 0x026C}, {0x026D, 0x026D, 0x026D},
510 {0x026E, 0x026E, 0x026E}, {0x019C, 0x026F, 0x019C},
511 {0x0270, 0x0270, 0x0270}, {0x0271, 0x0271, 0x0271},
512 {0x019D, 0x0272, 0x019D}, {0x0273, 0x0273, 0x0273},
513 {0x0274, 0x0274, 0x0274}, {0x019F, 0x0275, 0x019F},
514 {0x0276, 0x0276, 0x0276}, {0x0277, 0x0277, 0x0277},
515 {0x0278, 0x0278, 0x0278}, {0x0279, 0x0279, 0x0279},
516 {0x027A, 0x027A, 0x027A}, {0x027B, 0x027B, 0x027B},
517 {0x027C, 0x027C, 0x027C}, {0x027D, 0x027D, 0x027D},
518 {0x027E, 0x027E, 0x027E}, {0x027F, 0x027F, 0x027F},
519 {0x01A6, 0x0280, 0x01A6}, {0x0281, 0x0281, 0x0281},
520 {0x0282, 0x0282, 0x0282}, {0x01A9, 0x0283, 0x01A9},
521 {0x0284, 0x0284, 0x0284}, {0x0285, 0x0285, 0x0285},
522 {0x0286, 0x0286, 0x0286}, {0x0287, 0x0287, 0x0287},
523 {0x01AE, 0x0288, 0x01AE}, {0x0289, 0x0289, 0x0289},
524 {0x01B1, 0x028A, 0x01B1}, {0x01B2, 0x028B, 0x01B2},
525 {0x028C, 0x028C, 0x028C}, {0x028D, 0x028D, 0x028D},
526 {0x028E, 0x028E, 0x028E}, {0x028F, 0x028F, 0x028F},
527 {0x0290, 0x0290, 0x0290}, {0x0291, 0x0291, 0x0291},
528 {0x01B7, 0x0292, 0x01B7}, {0x0293, 0x0293, 0x0293},
529 {0x0294, 0x0294, 0x0294}, {0x0295, 0x0295, 0x0295},
530 {0x0296, 0x0296, 0x0296}, {0x0297, 0x0297, 0x0297},
531 {0x0298, 0x0298, 0x0298}, {0x0299, 0x0299, 0x0299},
532 {0x029A, 0x029A, 0x029A}, {0x029B, 0x029B, 0x029B},
533 {0x029C, 0x029C, 0x029C}, {0x029D, 0x029D, 0x029D},
534 {0x029E, 0x029E, 0x029E}, {0x029F, 0x029F, 0x029F},
535 {0x02A0, 0x02A0, 0x02A0}, {0x02A1, 0x02A1, 0x02A1},
536 {0x02A2, 0x02A2, 0x02A2}, {0x02A3, 0x02A3, 0x02A3},
537 {0x02A4, 0x02A4, 0x02A4}, {0x02A5, 0x02A5, 0x02A5},
538 {0x02A6, 0x02A6, 0x02A6}, {0x02A7, 0x02A7, 0x02A7},
539 {0x02A8, 0x02A8, 0x02A8}, {0x02A9, 0x02A9, 0x02A9},
540 {0x02AA, 0x02AA, 0x02AA}, {0x02AB, 0x02AB, 0x02AB},
541 {0x02AC, 0x02AC, 0x02AC}, {0x02AD, 0x02AD, 0x02AD},
542 {0x02AE, 0x02AE, 0x02AE}, {0x02AF, 0x02AF, 0x02AF},
543 {0x02B0, 0x02B0, 0x02B0}, {0x02B1, 0x02B1, 0x02B1},
544 {0x02B2, 0x02B2, 0x02B2}, {0x02B3, 0x02B3, 0x02B3},
545 {0x02B4, 0x02B4, 0x02B4}, {0x02B5, 0x02B5, 0x02B5},
546 {0x02B6, 0x02B6, 0x02B6}, {0x02B7, 0x02B7, 0x02B7},
547 {0x02B8, 0x02B8, 0x02B8}, {0x02B9, 0x02B9, 0x02B9},
548 {0x02BA, 0x02BA, 0x02BA}, {0x02BB, 0x02BB, 0x02BB},
549 {0x02BC, 0x02BC, 0x02BC}, {0x02BD, 0x02BD, 0x02BD},
550 {0x02BE, 0x02BE, 0x02BE}, {0x02BF, 0x02BF, 0x02BF},
551 {0x02C0, 0x02C0, 0x02C0}, {0x02C1, 0x02C1, 0x02C1},
552 {0x02C2, 0x02C2, 0x02C2}, {0x02C3, 0x02C3, 0x02C3},
553 {0x02C4, 0x02C4, 0x02C4}, {0x02C5, 0x02C5, 0x02C5},
554 {0x02C6, 0x02C6, 0x02C6}, {0x02C7, 0x02C7, 0x02C7},
555 {0x02C8, 0x02C8, 0x02C8}, {0x02C9, 0x02C9, 0x02C9},
556 {0x02CA, 0x02CA, 0x02CA}, {0x02CB, 0x02CB, 0x02CB},
557 {0x02CC, 0x02CC, 0x02CC}, {0x02CD, 0x02CD, 0x02CD},
558 {0x02CE, 0x02CE, 0x02CE}, {0x02CF, 0x02CF, 0x02CF},
559 {0x02D0, 0x02D0, 0x02D0}, {0x02D1, 0x02D1, 0x02D1},
560 {0x02D2, 0x02D2, 0x02D2}, {0x02D3, 0x02D3, 0x02D3},
561 {0x02D4, 0x02D4, 0x02D4}, {0x02D5, 0x02D5, 0x02D5},
562 {0x02D6, 0x02D6, 0x02D6}, {0x02D7, 0x02D7, 0x02D7},
563 {0x02D8, 0x02D8, 0x02D8}, {0x02D9, 0x02D9, 0x02D9},
564 {0x02DA, 0x02DA, 0x02DA}, {0x02DB, 0x02DB, 0x02DB},
565 {0x02DC, 0x02DC, 0x02DC}, {0x02DD, 0x02DD, 0x02DD},
566 {0x02DE, 0x02DE, 0x02DE}, {0x02DF, 0x02DF, 0x02DF},
567 {0x02E0, 0x02E0, 0x02E0}, {0x02E1, 0x02E1, 0x02E1},
568 {0x02E2, 0x02E2, 0x02E2}, {0x02E3, 0x02E3, 0x02E3},
569 {0x02E4, 0x02E4, 0x02E4}, {0x02E5, 0x02E5, 0x02E5},
570 {0x02E6, 0x02E6, 0x02E6}, {0x02E7, 0x02E7, 0x02E7},
571 {0x02E8, 0x02E8, 0x02E8}, {0x02E9, 0x02E9, 0x02E9},
572 {0x02EA, 0x02EA, 0x02EA}, {0x02EB, 0x02EB, 0x02EB},
573 {0x02EC, 0x02EC, 0x02EC}, {0x02ED, 0x02ED, 0x02ED},
574 {0x02EE, 0x02EE, 0x02EE}, {0x02EF, 0x02EF, 0x02EF},
575 {0x02F0, 0x02F0, 0x02F0}, {0x02F1, 0x02F1, 0x02F1},
576 {0x02F2, 0x02F2, 0x02F2}, {0x02F3, 0x02F3, 0x02F3},
577 {0x02F4, 0x02F4, 0x02F4}, {0x02F5, 0x02F5, 0x02F5},
578 {0x02F6, 0x02F6, 0x02F6}, {0x02F7, 0x02F7, 0x02F7},
579 {0x02F8, 0x02F8, 0x02F8}, {0x02F9, 0x02F9, 0x02F9},
580 {0x02FA, 0x02FA, 0x02FA}, {0x02FB, 0x02FB, 0x02FB},
581 {0x02FC, 0x02FC, 0x02FC}, {0x02FD, 0x02FD, 0x02FD},
582 {0x02FE, 0x02FE, 0x02FE}, {0x02FF, 0x02FF, 0x02FF}};
583
584 static const MY_UNICASE_CHARACTER plane03[] = {
585 {0x0300, 0x0300, 0x0300}, {0x0301, 0x0301, 0x0301},
586 {0x0302, 0x0302, 0x0302}, {0x0303, 0x0303, 0x0303},
587 {0x0304, 0x0304, 0x0304}, {0x0305, 0x0305, 0x0305},
588 {0x0306, 0x0306, 0x0306}, {0x0307, 0x0307, 0x0307},
589 {0x0308, 0x0308, 0x0308}, {0x0309, 0x0309, 0x0309},
590 {0x030A, 0x030A, 0x030A}, {0x030B, 0x030B, 0x030B},
591 {0x030C, 0x030C, 0x030C}, {0x030D, 0x030D, 0x030D},
592 {0x030E, 0x030E, 0x030E}, {0x030F, 0x030F, 0x030F},
593 {0x0310, 0x0310, 0x0310}, {0x0311, 0x0311, 0x0311},
594 {0x0312, 0x0312, 0x0312}, {0x0313, 0x0313, 0x0313},
595 {0x0314, 0x0314, 0x0314}, {0x0315, 0x0315, 0x0315},
596 {0x0316, 0x0316, 0x0316}, {0x0317, 0x0317, 0x0317},
597 {0x0318, 0x0318, 0x0318}, {0x0319, 0x0319, 0x0319},
598 {0x031A, 0x031A, 0x031A}, {0x031B, 0x031B, 0x031B},
599 {0x031C, 0x031C, 0x031C}, {0x031D, 0x031D, 0x031D},
600 {0x031E, 0x031E, 0x031E}, {0x031F, 0x031F, 0x031F},
601 {0x0320, 0x0320, 0x0320}, {0x0321, 0x0321, 0x0321},
602 {0x0322, 0x0322, 0x0322}, {0x0323, 0x0323, 0x0323},
603 {0x0324, 0x0324, 0x0324}, {0x0325, 0x0325, 0x0325},
604 {0x0326, 0x0326, 0x0326}, {0x0327, 0x0327, 0x0327},
605 {0x0328, 0x0328, 0x0328}, {0x0329, 0x0329, 0x0329},
606 {0x032A, 0x032A, 0x032A}, {0x032B, 0x032B, 0x032B},
607 {0x032C, 0x032C, 0x032C}, {0x032D, 0x032D, 0x032D},
608 {0x032E, 0x032E, 0x032E}, {0x032F, 0x032F, 0x032F},
609 {0x0330, 0x0330, 0x0330}, {0x0331, 0x0331, 0x0331},
610 {0x0332, 0x0332, 0x0332}, {0x0333, 0x0333, 0x0333},
611 {0x0334, 0x0334, 0x0334}, {0x0335, 0x0335, 0x0335},
612 {0x0336, 0x0336, 0x0336}, {0x0337, 0x0337, 0x0337},
613 {0x0338, 0x0338, 0x0338}, {0x0339, 0x0339, 0x0339},
614 {0x033A, 0x033A, 0x033A}, {0x033B, 0x033B, 0x033B},
615 {0x033C, 0x033C, 0x033C}, {0x033D, 0x033D, 0x033D},
616 {0x033E, 0x033E, 0x033E}, {0x033F, 0x033F, 0x033F},
617 {0x0340, 0x0340, 0x0340}, {0x0341, 0x0341, 0x0341},
618 {0x0342, 0x0342, 0x0342}, {0x0343, 0x0343, 0x0343},
619 {0x0344, 0x0344, 0x0344}, {0x0399, 0x0345, 0x0399},
620 {0x0346, 0x0346, 0x0346}, {0x0347, 0x0347, 0x0347},
621 {0x0348, 0x0348, 0x0348}, {0x0349, 0x0349, 0x0349},
622 {0x034A, 0x034A, 0x034A}, {0x034B, 0x034B, 0x034B},
623 {0x034C, 0x034C, 0x034C}, {0x034D, 0x034D, 0x034D},
624 {0x034E, 0x034E, 0x034E}, {0x034F, 0x034F, 0x034F},
625 {0x0350, 0x0350, 0x0350}, {0x0351, 0x0351, 0x0351},
626 {0x0352, 0x0352, 0x0352}, {0x0353, 0x0353, 0x0353},
627 {0x0354, 0x0354, 0x0354}, {0x0355, 0x0355, 0x0355},
628 {0x0356, 0x0356, 0x0356}, {0x0357, 0x0357, 0x0357},
629 {0x0358, 0x0358, 0x0358}, {0x0359, 0x0359, 0x0359},
630 {0x035A, 0x035A, 0x035A}, {0x035B, 0x035B, 0x035B},
631 {0x035C, 0x035C, 0x035C}, {0x035D, 0x035D, 0x035D},
632 {0x035E, 0x035E, 0x035E}, {0x035F, 0x035F, 0x035F},
633 {0x0360, 0x0360, 0x0360}, {0x0361, 0x0361, 0x0361},
634 {0x0362, 0x0362, 0x0362}, {0x0363, 0x0363, 0x0363},
635 {0x0364, 0x0364, 0x0364}, {0x0365, 0x0365, 0x0365},
636 {0x0366, 0x0366, 0x0366}, {0x0367, 0x0367, 0x0367},
637 {0x0368, 0x0368, 0x0368}, {0x0369, 0x0369, 0x0369},
638 {0x036A, 0x036A, 0x036A}, {0x036B, 0x036B, 0x036B},
639 {0x036C, 0x036C, 0x036C}, {0x036D, 0x036D, 0x036D},
640 {0x036E, 0x036E, 0x036E}, {0x036F, 0x036F, 0x036F},
641 {0x0370, 0x0370, 0x0370}, {0x0371, 0x0371, 0x0371},
642 {0x0372, 0x0372, 0x0372}, {0x0373, 0x0373, 0x0373},
643 {0x0374, 0x0374, 0x0374}, {0x0375, 0x0375, 0x0375},
644 {0x0376, 0x0376, 0x0376}, {0x0377, 0x0377, 0x0377},
645 {0x0378, 0x0378, 0x0378}, {0x0379, 0x0379, 0x0379},
646 {0x037A, 0x037A, 0x037A}, {0x037B, 0x037B, 0x037B},
647 {0x037C, 0x037C, 0x037C}, {0x037D, 0x037D, 0x037D},
648 {0x037E, 0x037E, 0x037E}, {0x037F, 0x037F, 0x037F},
649 {0x0380, 0x0380, 0x0380}, {0x0381, 0x0381, 0x0381},
650 {0x0382, 0x0382, 0x0382}, {0x0383, 0x0383, 0x0383},
651 {0x0384, 0x0384, 0x0384}, {0x0385, 0x0385, 0x0385},
652 {0x0386, 0x03AC, 0x0391}, {0x0387, 0x0387, 0x0387},
653 {0x0388, 0x03AD, 0x0395}, {0x0389, 0x03AE, 0x0397},
654 {0x038A, 0x03AF, 0x0399}, {0x038B, 0x038B, 0x038B},
655 {0x038C, 0x03CC, 0x039F}, {0x038D, 0x038D, 0x038D},
656 {0x038E, 0x03CD, 0x03A5}, {0x038F, 0x03CE, 0x03A9},
657 {0x0390, 0x0390, 0x0399}, {0x0391, 0x03B1, 0x0391},
658 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393},
659 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395},
660 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397},
661 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399},
662 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B},
663 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D},
664 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F},
665 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1},
666 {0x03A2, 0x03A2, 0x03A2}, {0x03A3, 0x03C3, 0x03A3},
667 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5},
668 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7},
669 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9},
670 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5},
671 {0x0386, 0x03AC, 0x0391}, {0x0388, 0x03AD, 0x0395},
672 {0x0389, 0x03AE, 0x0397}, {0x038A, 0x03AF, 0x0399},
673 {0x03B0, 0x03B0, 0x03A5}, {0x0391, 0x03B1, 0x0391},
674 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393},
675 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395},
676 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397},
677 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399},
678 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B},
679 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D},
680 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F},
681 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1},
682 {0x03A3, 0x03C2, 0x03A3}, {0x03A3, 0x03C3, 0x03A3},
683 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5},
684 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7},
685 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9},
686 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5},
687 {0x038C, 0x03CC, 0x039F}, {0x038E, 0x03CD, 0x03A5},
688 {0x038F, 0x03CE, 0x03A9}, {0x03CF, 0x03CF, 0x03CF},
689 {0x0392, 0x03D0, 0x0392}, {0x0398, 0x03D1, 0x0398},
690 {0x03D2, 0x03D2, 0x03D2}, {0x03D3, 0x03D3, 0x03D2},
691 {0x03D4, 0x03D4, 0x03D2}, {0x03A6, 0x03D5, 0x03A6},
692 {0x03A0, 0x03D6, 0x03A0}, {0x03D7, 0x03D7, 0x03D7},
693 {0x03D8, 0x03D8, 0x03D8}, {0x03D9, 0x03D9, 0x03D9},
694 {0x03DA, 0x03DB, 0x03DA}, {0x03DA, 0x03DB, 0x03DA},
695 {0x03DC, 0x03DD, 0x03DC}, {0x03DC, 0x03DD, 0x03DC},
696 {0x03DE, 0x03DF, 0x03DE}, {0x03DE, 0x03DF, 0x03DE},
697 {0x03E0, 0x03E1, 0x03E0}, {0x03E0, 0x03E1, 0x03E0},
698 {0x03E2, 0x03E3, 0x03E2}, {0x03E2, 0x03E3, 0x03E2},
699 {0x03E4, 0x03E5, 0x03E4}, {0x03E4, 0x03E5, 0x03E4},
700 {0x03E6, 0x03E7, 0x03E6}, {0x03E6, 0x03E7, 0x03E6},
701 {0x03E8, 0x03E9, 0x03E8}, {0x03E8, 0x03E9, 0x03E8},
702 {0x03EA, 0x03EB, 0x03EA}, {0x03EA, 0x03EB, 0x03EA},
703 {0x03EC, 0x03ED, 0x03EC}, {0x03EC, 0x03ED, 0x03EC},
704 {0x03EE, 0x03EF, 0x03EE}, {0x03EE, 0x03EF, 0x03EE},
705 {0x039A, 0x03F0, 0x039A}, {0x03A1, 0x03F1, 0x03A1},
706 {0x03A3, 0x03F2, 0x03A3}, {0x03F3, 0x03F3, 0x03F3},
707 {0x03F4, 0x03F4, 0x03F4}, {0x03F5, 0x03F5, 0x03F5},
708 {0x03F6, 0x03F6, 0x03F6}, {0x03F7, 0x03F7, 0x03F7},
709 {0x03F8, 0x03F8, 0x03F8}, {0x03F9, 0x03F9, 0x03F9},
710 {0x03FA, 0x03FA, 0x03FA}, {0x03FB, 0x03FB, 0x03FB},
711 {0x03FC, 0x03FC, 0x03FC}, {0x03FD, 0x03FD, 0x03FD},
712 {0x03FE, 0x03FE, 0x03FE}, {0x03FF, 0x03FF, 0x03FF}};
713
714 static const MY_UNICASE_CHARACTER plane04[] = {
715 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415},
716 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413},
717 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405},
718 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406},
719 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409},
720 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B},
721 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418},
722 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F},
723 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411},
724 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413},
725 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415},
726 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417},
727 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419},
728 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B},
729 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D},
730 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F},
731 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421},
732 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423},
733 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425},
734 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427},
735 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429},
736 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B},
737 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D},
738 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F},
739 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411},
740 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413},
741 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415},
742 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417},
743 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419},
744 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B},
745 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D},
746 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F},
747 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421},
748 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423},
749 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425},
750 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427},
751 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429},
752 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B},
753 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D},
754 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F},
755 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415},
756 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413},
757 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405},
758 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406},
759 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409},
760 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B},
761 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418},
762 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F},
763 {0x0460, 0x0461, 0x0460}, {0x0460, 0x0461, 0x0460},
764 {0x0462, 0x0463, 0x0462}, {0x0462, 0x0463, 0x0462},
765 {0x0464, 0x0465, 0x0464}, {0x0464, 0x0465, 0x0464},
766 {0x0466, 0x0467, 0x0466}, {0x0466, 0x0467, 0x0466},
767 {0x0468, 0x0469, 0x0468}, {0x0468, 0x0469, 0x0468},
768 {0x046A, 0x046B, 0x046A}, {0x046A, 0x046B, 0x046A},
769 {0x046C, 0x046D, 0x046C}, {0x046C, 0x046D, 0x046C},
770 {0x046E, 0x046F, 0x046E}, {0x046E, 0x046F, 0x046E},
771 {0x0470, 0x0471, 0x0470}, {0x0470, 0x0471, 0x0470},
772 {0x0472, 0x0473, 0x0472}, {0x0472, 0x0473, 0x0472},
773 {0x0474, 0x0475, 0x0474}, {0x0474, 0x0475, 0x0474},
774 {0x0476, 0x0477, 0x0474}, {0x0476, 0x0477, 0x0474},
775 {0x0478, 0x0479, 0x0478}, {0x0478, 0x0479, 0x0478},
776 {0x047A, 0x047B, 0x047A}, {0x047A, 0x047B, 0x047A},
777 {0x047C, 0x047D, 0x047C}, {0x047C, 0x047D, 0x047C},
778 {0x047E, 0x047F, 0x047E}, {0x047E, 0x047F, 0x047E},
779 {0x0480, 0x0481, 0x0480}, {0x0480, 0x0481, 0x0480},
780 {0x0482, 0x0482, 0x0482}, {0x0483, 0x0483, 0x0483},
781 {0x0484, 0x0484, 0x0484}, {0x0485, 0x0485, 0x0485},
782 {0x0486, 0x0486, 0x0486}, {0x0487, 0x0487, 0x0487},
783 {0x0488, 0x0488, 0x0488}, {0x0489, 0x0489, 0x0489},
784 {0x048A, 0x048A, 0x048A}, {0x048B, 0x048B, 0x048B},
785 {0x048C, 0x048D, 0x048C}, {0x048C, 0x048D, 0x048C},
786 {0x048E, 0x048F, 0x048E}, {0x048E, 0x048F, 0x048E},
787 {0x0490, 0x0491, 0x0490}, {0x0490, 0x0491, 0x0490},
788 {0x0492, 0x0493, 0x0492}, {0x0492, 0x0493, 0x0492},
789 {0x0494, 0x0495, 0x0494}, {0x0494, 0x0495, 0x0494},
790 {0x0496, 0x0497, 0x0496}, {0x0496, 0x0497, 0x0496},
791 {0x0498, 0x0499, 0x0498}, {0x0498, 0x0499, 0x0498},
792 {0x049A, 0x049B, 0x049A}, {0x049A, 0x049B, 0x049A},
793 {0x049C, 0x049D, 0x049C}, {0x049C, 0x049D, 0x049C},
794 {0x049E, 0x049F, 0x049E}, {0x049E, 0x049F, 0x049E},
795 {0x04A0, 0x04A1, 0x04A0}, {0x04A0, 0x04A1, 0x04A0},
796 {0x04A2, 0x04A3, 0x04A2}, {0x04A2, 0x04A3, 0x04A2},
797 {0x04A4, 0x04A5, 0x04A4}, {0x04A4, 0x04A5, 0x04A4},
798 {0x04A6, 0x04A7, 0x04A6}, {0x04A6, 0x04A7, 0x04A6},
799 {0x04A8, 0x04A9, 0x04A8}, {0x04A8, 0x04A9, 0x04A8},
800 {0x04AA, 0x04AB, 0x04AA}, {0x04AA, 0x04AB, 0x04AA},
801 {0x04AC, 0x04AD, 0x04AC}, {0x04AC, 0x04AD, 0x04AC},
802 {0x04AE, 0x04AF, 0x04AE}, {0x04AE, 0x04AF, 0x04AE},
803 {0x04B0, 0x04B1, 0x04B0}, {0x04B0, 0x04B1, 0x04B0},
804 {0x04B2, 0x04B3, 0x04B2}, {0x04B2, 0x04B3, 0x04B2},
805 {0x04B4, 0x04B5, 0x04B4}, {0x04B4, 0x04B5, 0x04B4},
806 {0x04B6, 0x04B7, 0x04B6}, {0x04B6, 0x04B7, 0x04B6},
807 {0x04B8, 0x04B9, 0x04B8}, {0x04B8, 0x04B9, 0x04B8},
808 {0x04BA, 0x04BB, 0x04BA}, {0x04BA, 0x04BB, 0x04BA},
809 {0x04BC, 0x04BD, 0x04BC}, {0x04BC, 0x04BD, 0x04BC},
810 {0x04BE, 0x04BF, 0x04BE}, {0x04BE, 0x04BF, 0x04BE},
811 {0x04C0, 0x04C0, 0x04C0}, {0x04C1, 0x04C2, 0x0416},
812 {0x04C1, 0x04C2, 0x0416}, {0x04C3, 0x04C4, 0x04C3},
813 {0x04C3, 0x04C4, 0x04C3}, {0x04C5, 0x04C5, 0x04C5},
814 {0x04C6, 0x04C6, 0x04C6}, {0x04C7, 0x04C8, 0x04C7},
815 {0x04C7, 0x04C8, 0x04C7}, {0x04C9, 0x04C9, 0x04C9},
816 {0x04CA, 0x04CA, 0x04CA}, {0x04CB, 0x04CC, 0x04CB},
817 {0x04CB, 0x04CC, 0x04CB}, {0x04CD, 0x04CD, 0x04CD},
818 {0x04CE, 0x04CE, 0x04CE}, {0x04CF, 0x04CF, 0x04CF},
819 {0x04D0, 0x04D1, 0x0410}, {0x04D0, 0x04D1, 0x0410},
820 {0x04D2, 0x04D3, 0x0410}, {0x04D2, 0x04D3, 0x0410},
821 {0x04D4, 0x04D5, 0x04D4}, {0x04D4, 0x04D5, 0x04D4},
822 {0x04D6, 0x04D7, 0x0415}, {0x04D6, 0x04D7, 0x0415},
823 {0x04D8, 0x04D9, 0x04D8}, {0x04D8, 0x04D9, 0x04D8},
824 {0x04DA, 0x04DB, 0x04D8}, {0x04DA, 0x04DB, 0x04D8},
825 {0x04DC, 0x04DD, 0x0416}, {0x04DC, 0x04DD, 0x0416},
826 {0x04DE, 0x04DF, 0x0417}, {0x04DE, 0x04DF, 0x0417},
827 {0x04E0, 0x04E1, 0x04E0}, {0x04E0, 0x04E1, 0x04E0},
828 {0x04E2, 0x04E3, 0x0418}, {0x04E2, 0x04E3, 0x0418},
829 {0x04E4, 0x04E5, 0x0418}, {0x04E4, 0x04E5, 0x0418},
830 {0x04E6, 0x04E7, 0x041E}, {0x04E6, 0x04E7, 0x041E},
831 {0x04E8, 0x04E9, 0x04E8}, {0x04E8, 0x04E9, 0x04E8},
832 {0x04EA, 0x04EB, 0x04E8}, {0x04EA, 0x04EB, 0x04E8},
833 {0x04EC, 0x04ED, 0x042D}, {0x04EC, 0x04ED, 0x042D},
834 {0x04EE, 0x04EF, 0x0423}, {0x04EE, 0x04EF, 0x0423},
835 {0x04F0, 0x04F1, 0x0423}, {0x04F0, 0x04F1, 0x0423},
836 {0x04F2, 0x04F3, 0x0423}, {0x04F2, 0x04F3, 0x0423},
837 {0x04F4, 0x04F5, 0x0427}, {0x04F4, 0x04F5, 0x0427},
838 {0x04F6, 0x04F6, 0x04F6}, {0x04F7, 0x04F7, 0x04F7},
839 {0x04F8, 0x04F9, 0x042B}, {0x04F8, 0x04F9, 0x042B},
840 {0x04FA, 0x04FA, 0x04FA}, {0x04FB, 0x04FB, 0x04FB},
841 {0x04FC, 0x04FC, 0x04FC}, {0x04FD, 0x04FD, 0x04FD},
842 {0x04FE, 0x04FE, 0x04FE}, {0x04FF, 0x04FF, 0x04FF}};
843
844 static const MY_UNICASE_CHARACTER plane05[] = {
845 {0x0500, 0x0500, 0x0500}, {0x0501, 0x0501, 0x0501},
846 {0x0502, 0x0502, 0x0502}, {0x0503, 0x0503, 0x0503},
847 {0x0504, 0x0504, 0x0504}, {0x0505, 0x0505, 0x0505},
848 {0x0506, 0x0506, 0x0506}, {0x0507, 0x0507, 0x0507},
849 {0x0508, 0x0508, 0x0508}, {0x0509, 0x0509, 0x0509},
850 {0x050A, 0x050A, 0x050A}, {0x050B, 0x050B, 0x050B},
851 {0x050C, 0x050C, 0x050C}, {0x050D, 0x050D, 0x050D},
852 {0x050E, 0x050E, 0x050E}, {0x050F, 0x050F, 0x050F},
853 {0x0510, 0x0510, 0x0510}, {0x0511, 0x0511, 0x0511},
854 {0x0512, 0x0512, 0x0512}, {0x0513, 0x0513, 0x0513},
855 {0x0514, 0x0514, 0x0514}, {0x0515, 0x0515, 0x0515},
856 {0x0516, 0x0516, 0x0516}, {0x0517, 0x0517, 0x0517},
857 {0x0518, 0x0518, 0x0518}, {0x0519, 0x0519, 0x0519},
858 {0x051A, 0x051A, 0x051A}, {0x051B, 0x051B, 0x051B},
859 {0x051C, 0x051C, 0x051C}, {0x051D, 0x051D, 0x051D},
860 {0x051E, 0x051E, 0x051E}, {0x051F, 0x051F, 0x051F},
861 {0x0520, 0x0520, 0x0520}, {0x0521, 0x0521, 0x0521},
862 {0x0522, 0x0522, 0x0522}, {0x0523, 0x0523, 0x0523},
863 {0x0524, 0x0524, 0x0524}, {0x0525, 0x0525, 0x0525},
864 {0x0526, 0x0526, 0x0526}, {0x0527, 0x0527, 0x0527},
865 {0x0528, 0x0528, 0x0528}, {0x0529, 0x0529, 0x0529},
866 {0x052A, 0x052A, 0x052A}, {0x052B, 0x052B, 0x052B},
867 {0x052C, 0x052C, 0x052C}, {0x052D, 0x052D, 0x052D},
868 {0x052E, 0x052E, 0x052E}, {0x052F, 0x052F, 0x052F},
869 {0x0530, 0x0530, 0x0530}, {0x0531, 0x0561, 0x0531},
870 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533},
871 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535},
872 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537},
873 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539},
874 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B},
875 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D},
876 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F},
877 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541},
878 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543},
879 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545},
880 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547},
881 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549},
882 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B},
883 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D},
884 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F},
885 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551},
886 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553},
887 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555},
888 {0x0556, 0x0586, 0x0556}, {0x0557, 0x0557, 0x0557},
889 {0x0558, 0x0558, 0x0558}, {0x0559, 0x0559, 0x0559},
890 {0x055A, 0x055A, 0x055A}, {0x055B, 0x055B, 0x055B},
891 {0x055C, 0x055C, 0x055C}, {0x055D, 0x055D, 0x055D},
892 {0x055E, 0x055E, 0x055E}, {0x055F, 0x055F, 0x055F},
893 {0x0560, 0x0560, 0x0560}, {0x0531, 0x0561, 0x0531},
894 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533},
895 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535},
896 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537},
897 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539},
898 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B},
899 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D},
900 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F},
901 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541},
902 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543},
903 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545},
904 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547},
905 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549},
906 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B},
907 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D},
908 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F},
909 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551},
910 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553},
911 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555},
912 {0x0556, 0x0586, 0x0556}, {0x0587, 0x0587, 0x0587},
913 {0x0588, 0x0588, 0x0588}, {0x0589, 0x0589, 0x0589},
914 {0x058A, 0x058A, 0x058A}, {0x058B, 0x058B, 0x058B},
915 {0x058C, 0x058C, 0x058C}, {0x058D, 0x058D, 0x058D},
916 {0x058E, 0x058E, 0x058E}, {0x058F, 0x058F, 0x058F},
917 {0x0590, 0x0590, 0x0590}, {0x0591, 0x0591, 0x0591},
918 {0x0592, 0x0592, 0x0592}, {0x0593, 0x0593, 0x0593},
919 {0x0594, 0x0594, 0x0594}, {0x0595, 0x0595, 0x0595},
920 {0x0596, 0x0596, 0x0596}, {0x0597, 0x0597, 0x0597},
921 {0x0598, 0x0598, 0x0598}, {0x0599, 0x0599, 0x0599},
922 {0x059A, 0x059A, 0x059A}, {0x059B, 0x059B, 0x059B},
923 {0x059C, 0x059C, 0x059C}, {0x059D, 0x059D, 0x059D},
924 {0x059E, 0x059E, 0x059E}, {0x059F, 0x059F, 0x059F},
925 {0x05A0, 0x05A0, 0x05A0}, {0x05A1, 0x05A1, 0x05A1},
926 {0x05A2, 0x05A2, 0x05A2}, {0x05A3, 0x05A3, 0x05A3},
927 {0x05A4, 0x05A4, 0x05A4}, {0x05A5, 0x05A5, 0x05A5},
928 {0x05A6, 0x05A6, 0x05A6}, {0x05A7, 0x05A7, 0x05A7},
929 {0x05A8, 0x05A8, 0x05A8}, {0x05A9, 0x05A9, 0x05A9},
930 {0x05AA, 0x05AA, 0x05AA}, {0x05AB, 0x05AB, 0x05AB},
931 {0x05AC, 0x05AC, 0x05AC}, {0x05AD, 0x05AD, 0x05AD},
932 {0x05AE, 0x05AE, 0x05AE}, {0x05AF, 0x05AF, 0x05AF},
933 {0x05B0, 0x05B0, 0x05B0}, {0x05B1, 0x05B1, 0x05B1},
934 {0x05B2, 0x05B2, 0x05B2}, {0x05B3, 0x05B3, 0x05B3},
935 {0x05B4, 0x05B4, 0x05B4}, {0x05B5, 0x05B5, 0x05B5},
936 {0x05B6, 0x05B6, 0x05B6}, {0x05B7, 0x05B7, 0x05B7},
937 {0x05B8, 0x05B8, 0x05B8}, {0x05B9, 0x05B9, 0x05B9},
938 {0x05BA, 0x05BA, 0x05BA}, {0x05BB, 0x05BB, 0x05BB},
939 {0x05BC, 0x05BC, 0x05BC}, {0x05BD, 0x05BD, 0x05BD},
940 {0x05BE, 0x05BE, 0x05BE}, {0x05BF, 0x05BF, 0x05BF},
941 {0x05C0, 0x05C0, 0x05C0}, {0x05C1, 0x05C1, 0x05C1},
942 {0x05C2, 0x05C2, 0x05C2}, {0x05C3, 0x05C3, 0x05C3},
943 {0x05C4, 0x05C4, 0x05C4}, {0x05C5, 0x05C5, 0x05C5},
944 {0x05C6, 0x05C6, 0x05C6}, {0x05C7, 0x05C7, 0x05C7},
945 {0x05C8, 0x05C8, 0x05C8}, {0x05C9, 0x05C9, 0x05C9},
946 {0x05CA, 0x05CA, 0x05CA}, {0x05CB, 0x05CB, 0x05CB},
947 {0x05CC, 0x05CC, 0x05CC}, {0x05CD, 0x05CD, 0x05CD},
948 {0x05CE, 0x05CE, 0x05CE}, {0x05CF, 0x05CF, 0x05CF},
949 {0x05D0, 0x05D0, 0x05D0}, {0x05D1, 0x05D1, 0x05D1},
950 {0x05D2, 0x05D2, 0x05D2}, {0x05D3, 0x05D3, 0x05D3},
951 {0x05D4, 0x05D4, 0x05D4}, {0x05D5, 0x05D5, 0x05D5},
952 {0x05D6, 0x05D6, 0x05D6}, {0x05D7, 0x05D7, 0x05D7},
953 {0x05D8, 0x05D8, 0x05D8}, {0x05D9, 0x05D9, 0x05D9},
954 {0x05DA, 0x05DA, 0x05DA}, {0x05DB, 0x05DB, 0x05DB},
955 {0x05DC, 0x05DC, 0x05DC}, {0x05DD, 0x05DD, 0x05DD},
956 {0x05DE, 0x05DE, 0x05DE}, {0x05DF, 0x05DF, 0x05DF},
957 {0x05E0, 0x05E0, 0x05E0}, {0x05E1, 0x05E1, 0x05E1},
958 {0x05E2, 0x05E2, 0x05E2}, {0x05E3, 0x05E3, 0x05E3},
959 {0x05E4, 0x05E4, 0x05E4}, {0x05E5, 0x05E5, 0x05E5},
960 {0x05E6, 0x05E6, 0x05E6}, {0x05E7, 0x05E7, 0x05E7},
961 {0x05E8, 0x05E8, 0x05E8}, {0x05E9, 0x05E9, 0x05E9},
962 {0x05EA, 0x05EA, 0x05EA}, {0x05EB, 0x05EB, 0x05EB},
963 {0x05EC, 0x05EC, 0x05EC}, {0x05ED, 0x05ED, 0x05ED},
964 {0x05EE, 0x05EE, 0x05EE}, {0x05EF, 0x05EF, 0x05EF},
965 {0x05F0, 0x05F0, 0x05F0}, {0x05F1, 0x05F1, 0x05F1},
966 {0x05F2, 0x05F2, 0x05F2}, {0x05F3, 0x05F3, 0x05F3},
967 {0x05F4, 0x05F4, 0x05F4}, {0x05F5, 0x05F5, 0x05F5},
968 {0x05F6, 0x05F6, 0x05F6}, {0x05F7, 0x05F7, 0x05F7},
969 {0x05F8, 0x05F8, 0x05F8}, {0x05F9, 0x05F9, 0x05F9},
970 {0x05FA, 0x05FA, 0x05FA}, {0x05FB, 0x05FB, 0x05FB},
971 {0x05FC, 0x05FC, 0x05FC}, {0x05FD, 0x05FD, 0x05FD},
972 {0x05FE, 0x05FE, 0x05FE}, {0x05FF, 0x05FF, 0x05FF}};
973
974 static const MY_UNICASE_CHARACTER plane1E[] = {
975 {0x1E00, 0x1E01, 0x0041}, {0x1E00, 0x1E01, 0x0041},
976 {0x1E02, 0x1E03, 0x0042}, {0x1E02, 0x1E03, 0x0042},
977 {0x1E04, 0x1E05, 0x0042}, {0x1E04, 0x1E05, 0x0042},
978 {0x1E06, 0x1E07, 0x0042}, {0x1E06, 0x1E07, 0x0042},
979 {0x1E08, 0x1E09, 0x0043}, {0x1E08, 0x1E09, 0x0043},
980 {0x1E0A, 0x1E0B, 0x0044}, {0x1E0A, 0x1E0B, 0x0044},
981 {0x1E0C, 0x1E0D, 0x0044}, {0x1E0C, 0x1E0D, 0x0044},
982 {0x1E0E, 0x1E0F, 0x0044}, {0x1E0E, 0x1E0F, 0x0044},
983 {0x1E10, 0x1E11, 0x0044}, {0x1E10, 0x1E11, 0x0044},
984 {0x1E12, 0x1E13, 0x0044}, {0x1E12, 0x1E13, 0x0044},
985 {0x1E14, 0x1E15, 0x0045}, {0x1E14, 0x1E15, 0x0045},
986 {0x1E16, 0x1E17, 0x0045}, {0x1E16, 0x1E17, 0x0045},
987 {0x1E18, 0x1E19, 0x0045}, {0x1E18, 0x1E19, 0x0045},
988 {0x1E1A, 0x1E1B, 0x0045}, {0x1E1A, 0x1E1B, 0x0045},
989 {0x1E1C, 0x1E1D, 0x0045}, {0x1E1C, 0x1E1D, 0x0045},
990 {0x1E1E, 0x1E1F, 0x0046}, {0x1E1E, 0x1E1F, 0x0046},
991 {0x1E20, 0x1E21, 0x0047}, {0x1E20, 0x1E21, 0x0047},
992 {0x1E22, 0x1E23, 0x0048}, {0x1E22, 0x1E23, 0x0048},
993 {0x1E24, 0x1E25, 0x0048}, {0x1E24, 0x1E25, 0x0048},
994 {0x1E26, 0x1E27, 0x0048}, {0x1E26, 0x1E27, 0x0048},
995 {0x1E28, 0x1E29, 0x0048}, {0x1E28, 0x1E29, 0x0048},
996 {0x1E2A, 0x1E2B, 0x0048}, {0x1E2A, 0x1E2B, 0x0048},
997 {0x1E2C, 0x1E2D, 0x0049}, {0x1E2C, 0x1E2D, 0x0049},
998 {0x1E2E, 0x1E2F, 0x0049}, {0x1E2E, 0x1E2F, 0x0049},
999 {0x1E30, 0x1E31, 0x004B}, {0x1E30, 0x1E31, 0x004B},
1000 {0x1E32, 0x1E33, 0x004B}, {0x1E32, 0x1E33, 0x004B},
1001 {0x1E34, 0x1E35, 0x004B}, {0x1E34, 0x1E35, 0x004B},
1002 {0x1E36, 0x1E37, 0x004C}, {0x1E36, 0x1E37, 0x004C},
1003 {0x1E38, 0x1E39, 0x004C}, {0x1E38, 0x1E39, 0x004C},
1004 {0x1E3A, 0x1E3B, 0x004C}, {0x1E3A, 0x1E3B, 0x004C},
1005 {0x1E3C, 0x1E3D, 0x004C}, {0x1E3C, 0x1E3D, 0x004C},
1006 {0x1E3E, 0x1E3F, 0x004D}, {0x1E3E, 0x1E3F, 0x004D},
1007 {0x1E40, 0x1E41, 0x004D}, {0x1E40, 0x1E41, 0x004D},
1008 {0x1E42, 0x1E43, 0x004D}, {0x1E42, 0x1E43, 0x004D},
1009 {0x1E44, 0x1E45, 0x004E}, {0x1E44, 0x1E45, 0x004E},
1010 {0x1E46, 0x1E47, 0x004E}, {0x1E46, 0x1E47, 0x004E},
1011 {0x1E48, 0x1E49, 0x004E}, {0x1E48, 0x1E49, 0x004E},
1012 {0x1E4A, 0x1E4B, 0x004E}, {0x1E4A, 0x1E4B, 0x004E},
1013 {0x1E4C, 0x1E4D, 0x004F}, {0x1E4C, 0x1E4D, 0x004F},
1014 {0x1E4E, 0x1E4F, 0x004F}, {0x1E4E, 0x1E4F, 0x004F},
1015 {0x1E50, 0x1E51, 0x004F}, {0x1E50, 0x1E51, 0x004F},
1016 {0x1E52, 0x1E53, 0x004F}, {0x1E52, 0x1E53, 0x004F},
1017 {0x1E54, 0x1E55, 0x0050}, {0x1E54, 0x1E55, 0x0050},
1018 {0x1E56, 0x1E57, 0x0050}, {0x1E56, 0x1E57, 0x0050},
1019 {0x1E58, 0x1E59, 0x0052}, {0x1E58, 0x1E59, 0x0052},
1020 {0x1E5A, 0x1E5B, 0x0052}, {0x1E5A, 0x1E5B, 0x0052},
1021 {0x1E5C, 0x1E5D, 0x0052}, {0x1E5C, 0x1E5D, 0x0052},
1022 {0x1E5E, 0x1E5F, 0x0052}, {0x1E5E, 0x1E5F, 0x0052},
1023 {0x1E60, 0x1E61, 0x0053}, {0x1E60, 0x1E61, 0x0053},
1024 {0x1E62, 0x1E63, 0x0053}, {0x1E62, 0x1E63, 0x0053},
1025 {0x1E64, 0x1E65, 0x0053}, {0x1E64, 0x1E65, 0x0053},
1026 {0x1E66, 0x1E67, 0x0053}, {0x1E66, 0x1E67, 0x0053},
1027 {0x1E68, 0x1E69, 0x0053}, {0x1E68, 0x1E69, 0x0053},
1028 {0x1E6A, 0x1E6B, 0x0054}, {0x1E6A, 0x1E6B, 0x0054},
1029 {0x1E6C, 0x1E6D, 0x0054}, {0x1E6C, 0x1E6D, 0x0054},
1030 {0x1E6E, 0x1E6F, 0x0054}, {0x1E6E, 0x1E6F, 0x0054},
1031 {0x1E70, 0x1E71, 0x0054}, {0x1E70, 0x1E71, 0x0054},
1032 {0x1E72, 0x1E73, 0x0055}, {0x1E72, 0x1E73, 0x0055},
1033 {0x1E74, 0x1E75, 0x0055}, {0x1E74, 0x1E75, 0x0055},
1034 {0x1E76, 0x1E77, 0x0055}, {0x1E76, 0x1E77, 0x0055},
1035 {0x1E78, 0x1E79, 0x0055}, {0x1E78, 0x1E79, 0x0055},
1036 {0x1E7A, 0x1E7B, 0x0055}, {0x1E7A, 0x1E7B, 0x0055},
1037 {0x1E7C, 0x1E7D, 0x0056}, {0x1E7C, 0x1E7D, 0x0056},
1038 {0x1E7E, 0x1E7F, 0x0056}, {0x1E7E, 0x1E7F, 0x0056},
1039 {0x1E80, 0x1E81, 0x0057}, {0x1E80, 0x1E81, 0x0057},
1040 {0x1E82, 0x1E83, 0x0057}, {0x1E82, 0x1E83, 0x0057},
1041 {0x1E84, 0x1E85, 0x0057}, {0x1E84, 0x1E85, 0x0057},
1042 {0x1E86, 0x1E87, 0x0057}, {0x1E86, 0x1E87, 0x0057},
1043 {0x1E88, 0x1E89, 0x0057}, {0x1E88, 0x1E89, 0x0057},
1044 {0x1E8A, 0x1E8B, 0x0058}, {0x1E8A, 0x1E8B, 0x0058},
1045 {0x1E8C, 0x1E8D, 0x0058}, {0x1E8C, 0x1E8D, 0x0058},
1046 {0x1E8E, 0x1E8F, 0x0059}, {0x1E8E, 0x1E8F, 0x0059},
1047 {0x1E90, 0x1E91, 0x005A}, {0x1E90, 0x1E91, 0x005A},
1048 {0x1E92, 0x1E93, 0x005A}, {0x1E92, 0x1E93, 0x005A},
1049 {0x1E94, 0x1E95, 0x005A}, {0x1E94, 0x1E95, 0x005A},
1050 {0x1E96, 0x1E96, 0x0048}, {0x1E97, 0x1E97, 0x0054},
1051 {0x1E98, 0x1E98, 0x0057}, {0x1E99, 0x1E99, 0x0059},
1052 {0x1E9A, 0x1E9A, 0x1E9A}, {0x1E60, 0x1E9B, 0x0053},
1053 {0x1E9C, 0x1E9C, 0x1E9C}, {0x1E9D, 0x1E9D, 0x1E9D},
1054 {0x1E9E, 0x1E9E, 0x1E9E}, {0x1E9F, 0x1E9F, 0x1E9F},
1055 {0x1EA0, 0x1EA1, 0x0041}, {0x1EA0, 0x1EA1, 0x0041},
1056 {0x1EA2, 0x1EA3, 0x0041}, {0x1EA2, 0x1EA3, 0x0041},
1057 {0x1EA4, 0x1EA5, 0x0041}, {0x1EA4, 0x1EA5, 0x0041},
1058 {0x1EA6, 0x1EA7, 0x0041}, {0x1EA6, 0x1EA7, 0x0041},
1059 {0x1EA8, 0x1EA9, 0x0041}, {0x1EA8, 0x1EA9, 0x0041},
1060 {0x1EAA, 0x1EAB, 0x0041}, {0x1EAA, 0x1EAB, 0x0041},
1061 {0x1EAC, 0x1EAD, 0x0041}, {0x1EAC, 0x1EAD, 0x0041},
1062 {0x1EAE, 0x1EAF, 0x0041}, {0x1EAE, 0x1EAF, 0x0041},
1063 {0x1EB0, 0x1EB1, 0x0041}, {0x1EB0, 0x1EB1, 0x0041},
1064 {0x1EB2, 0x1EB3, 0x0041}, {0x1EB2, 0x1EB3, 0x0041},
1065 {0x1EB4, 0x1EB5, 0x0041}, {0x1EB4, 0x1EB5, 0x0041},
1066 {0x1EB6, 0x1EB7, 0x0041}, {0x1EB6, 0x1EB7, 0x0041},
1067 {0x1EB8, 0x1EB9, 0x0045}, {0x1EB8, 0x1EB9, 0x0045},
1068 {0x1EBA, 0x1EBB, 0x0045}, {0x1EBA, 0x1EBB, 0x0045},
1069 {0x1EBC, 0x1EBD, 0x0045}, {0x1EBC, 0x1EBD, 0x0045},
1070 {0x1EBE, 0x1EBF, 0x0045}, {0x1EBE, 0x1EBF, 0x0045},
1071 {0x1EC0, 0x1EC1, 0x0045}, {0x1EC0, 0x1EC1, 0x0045},
1072 {0x1EC2, 0x1EC3, 0x0045}, {0x1EC2, 0x1EC3, 0x0045},
1073 {0x1EC4, 0x1EC5, 0x0045}, {0x1EC4, 0x1EC5, 0x0045},
1074 {0x1EC6, 0x1EC7, 0x0045}, {0x1EC6, 0x1EC7, 0x0045},
1075 {0x1EC8, 0x1EC9, 0x0049}, {0x1EC8, 0x1EC9, 0x0049},
1076 {0x1ECA, 0x1ECB, 0x0049}, {0x1ECA, 0x1ECB, 0x0049},
1077 {0x1ECC, 0x1ECD, 0x004F}, {0x1ECC, 0x1ECD, 0x004F},
1078 {0x1ECE, 0x1ECF, 0x004F}, {0x1ECE, 0x1ECF, 0x004F},
1079 {0x1ED0, 0x1ED1, 0x004F}, {0x1ED0, 0x1ED1, 0x004F},
1080 {0x1ED2, 0x1ED3, 0x004F}, {0x1ED2, 0x1ED3, 0x004F},
1081 {0x1ED4, 0x1ED5, 0x004F}, {0x1ED4, 0x1ED5, 0x004F},
1082 {0x1ED6, 0x1ED7, 0x004F}, {0x1ED6, 0x1ED7, 0x004F},
1083 {0x1ED8, 0x1ED9, 0x004F}, {0x1ED8, 0x1ED9, 0x004F},
1084 {0x1EDA, 0x1EDB, 0x004F}, {0x1EDA, 0x1EDB, 0x004F},
1085 {0x1EDC, 0x1EDD, 0x004F}, {0x1EDC, 0x1EDD, 0x004F},
1086 {0x1EDE, 0x1EDF, 0x004F}, {0x1EDE, 0x1EDF, 0x004F},
1087 {0x1EE0, 0x1EE1, 0x004F}, {0x1EE0, 0x1EE1, 0x004F},
1088 {0x1EE2, 0x1EE3, 0x004F}, {0x1EE2, 0x1EE3, 0x004F},
1089 {0x1EE4, 0x1EE5, 0x0055}, {0x1EE4, 0x1EE5, 0x0055},
1090 {0x1EE6, 0x1EE7, 0x0055}, {0x1EE6, 0x1EE7, 0x0055},
1091 {0x1EE8, 0x1EE9, 0x0055}, {0x1EE8, 0x1EE9, 0x0055},
1092 {0x1EEA, 0x1EEB, 0x0055}, {0x1EEA, 0x1EEB, 0x0055},
1093 {0x1EEC, 0x1EED, 0x0055}, {0x1EEC, 0x1EED, 0x0055},
1094 {0x1EEE, 0x1EEF, 0x0055}, {0x1EEE, 0x1EEF, 0x0055},
1095 {0x1EF0, 0x1EF1, 0x0055}, {0x1EF0, 0x1EF1, 0x0055},
1096 {0x1EF2, 0x1EF3, 0x0059}, {0x1EF2, 0x1EF3, 0x0059},
1097 {0x1EF4, 0x1EF5, 0x0059}, {0x1EF4, 0x1EF5, 0x0059},
1098 {0x1EF6, 0x1EF7, 0x0059}, {0x1EF6, 0x1EF7, 0x0059},
1099 {0x1EF8, 0x1EF9, 0x0059}, {0x1EF8, 0x1EF9, 0x0059},
1100 {0x1EFA, 0x1EFA, 0x1EFA}, {0x1EFB, 0x1EFB, 0x1EFB},
1101 {0x1EFC, 0x1EFC, 0x1EFC}, {0x1EFD, 0x1EFD, 0x1EFD},
1102 {0x1EFE, 0x1EFE, 0x1EFE}, {0x1EFF, 0x1EFF, 0x1EFF}};
1103
1104 static const MY_UNICASE_CHARACTER plane1F[] = {
1105 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391},
1106 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391},
1107 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391},
1108 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391},
1109 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391},
1110 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391},
1111 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391},
1112 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391},
1113 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395},
1114 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395},
1115 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395},
1116 {0x1F16, 0x1F16, 0x1F16}, {0x1F17, 0x1F17, 0x1F17},
1117 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395},
1118 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395},
1119 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395},
1120 {0x1F1E, 0x1F1E, 0x1F1E}, {0x1F1F, 0x1F1F, 0x1F1F},
1121 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397},
1122 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397},
1123 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397},
1124 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397},
1125 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397},
1126 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397},
1127 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397},
1128 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397},
1129 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399},
1130 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399},
1131 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399},
1132 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399},
1133 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399},
1134 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399},
1135 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399},
1136 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399},
1137 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F},
1138 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F},
1139 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F},
1140 {0x1F46, 0x1F46, 0x1F46}, {0x1F47, 0x1F47, 0x1F47},
1141 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F},
1142 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F},
1143 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F},
1144 {0x1F4E, 0x1F4E, 0x1F4E}, {0x1F4F, 0x1F4F, 0x1F4F},
1145 {0x1F50, 0x1F50, 0x03A5}, {0x1F59, 0x1F51, 0x03A5},
1146 {0x1F52, 0x1F52, 0x03A5}, {0x1F5B, 0x1F53, 0x03A5},
1147 {0x1F54, 0x1F54, 0x03A5}, {0x1F5D, 0x1F55, 0x03A5},
1148 {0x1F56, 0x1F56, 0x03A5}, {0x1F5F, 0x1F57, 0x03A5},
1149 {0x1F58, 0x1F58, 0x1F58}, {0x1F59, 0x1F51, 0x03A5},
1150 {0x1F5A, 0x1F5A, 0x1F5A}, {0x1F5B, 0x1F53, 0x03A5},
1151 {0x1F5C, 0x1F5C, 0x1F5C}, {0x1F5D, 0x1F55, 0x03A5},
1152 {0x1F5E, 0x1F5E, 0x1F5E}, {0x1F5F, 0x1F57, 0x03A5},
1153 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9},
1154 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9},
1155 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9},
1156 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9},
1157 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9},
1158 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9},
1159 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9},
1160 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9},
1161 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB},
1162 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9},
1163 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB},
1164 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB},
1165 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9},
1166 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB},
1167 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB},
1168 {0x1F7E, 0x1F7E, 0x1F7E}, {0x1F7F, 0x1F7F, 0x1F7F},
1169 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391},
1170 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391},
1171 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391},
1172 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391},
1173 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391},
1174 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391},
1175 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391},
1176 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391},
1177 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397},
1178 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397},
1179 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397},
1180 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397},
1181 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397},
1182 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397},
1183 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397},
1184 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397},
1185 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9},
1186 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9},
1187 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9},
1188 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9},
1189 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9},
1190 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9},
1191 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9},
1192 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9},
1193 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391},
1194 {0x1FB2, 0x1FB2, 0x0391}, {0x1FBC, 0x1FB3, 0x0391},
1195 {0x1FB4, 0x1FB4, 0x0391}, {0x1FB5, 0x1FB5, 0x1FB5},
1196 {0x1FB6, 0x1FB6, 0x0391}, {0x1FB7, 0x1FB7, 0x0391},
1197 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391},
1198 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB},
1199 {0x1FBC, 0x1FB3, 0x0391}, {0x1FBD, 0x1FBD, 0x1FBD},
1200 {0x0399, 0x1FBE, 0x0399}, {0x1FBF, 0x1FBF, 0x1FBF},
1201 {0x1FC0, 0x1FC0, 0x1FC0}, {0x1FC1, 0x1FC1, 0x1FC1},
1202 {0x1FC2, 0x1FC2, 0x0397}, {0x1FCC, 0x1FC3, 0x0397},
1203 {0x1FC4, 0x1FC4, 0x0397}, {0x1FC5, 0x1FC5, 0x1FC5},
1204 {0x1FC6, 0x1FC6, 0x0397}, {0x1FC7, 0x1FC7, 0x0397},
1205 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9},
1206 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB},
1207 {0x1FCC, 0x1FC3, 0x0397}, {0x1FCD, 0x1FCD, 0x1FCD},
1208 {0x1FCE, 0x1FCE, 0x1FCE}, {0x1FCF, 0x1FCF, 0x1FCF},
1209 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399},
1210 {0x1FD2, 0x1FD2, 0x0399}, {0x1FD3, 0x1FD3, 0x1FD3},
1211 {0x1FD4, 0x1FD4, 0x1FD4}, {0x1FD5, 0x1FD5, 0x1FD5},
1212 {0x1FD6, 0x1FD6, 0x0399}, {0x1FD7, 0x1FD7, 0x0399},
1213 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399},
1214 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB},
1215 {0x1FDC, 0x1FDC, 0x1FDC}, {0x1FDD, 0x1FDD, 0x1FDD},
1216 {0x1FDE, 0x1FDE, 0x1FDE}, {0x1FDF, 0x1FDF, 0x1FDF},
1217 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5},
1218 {0x1FE2, 0x1FE2, 0x03A5}, {0x1FE3, 0x1FE3, 0x1FE3},
1219 {0x1FE4, 0x1FE4, 0x03A1}, {0x1FEC, 0x1FE5, 0x03A1},
1220 {0x1FE6, 0x1FE6, 0x03A5}, {0x1FE7, 0x1FE7, 0x03A5},
1221 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5},
1222 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB},
1223 {0x1FEC, 0x1FE5, 0x03A1}, {0x1FED, 0x1FED, 0x1FED},
1224 {0x1FEE, 0x1FEE, 0x1FEE}, {0x1FEF, 0x1FEF, 0x1FEF},
1225 {0x1FF0, 0x1FF0, 0x1FF0}, {0x1FF1, 0x1FF1, 0x1FF1},
1226 {0x1FF2, 0x1FF2, 0x03A9}, {0x1FFC, 0x1FF3, 0x03A9},
1227 {0x1FF4, 0x1FF4, 0x03A9}, {0x1FF5, 0x1FF5, 0x1FF5},
1228 {0x1FF6, 0x1FF6, 0x03A9}, {0x1FF7, 0x1FF7, 0x03A9},
1229 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9},
1230 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB},
1231 {0x1FFC, 0x1FF3, 0x03A9}, {0x1FFD, 0x1FFD, 0x1FFD},
1232 {0x1FFE, 0x1FFE, 0x1FFE}, {0x1FFF, 0x1FFF, 0x1FFF}};
1233
1234 static const MY_UNICASE_CHARACTER plane21[] = {
1235 {0x2100, 0x2100, 0x2100}, {0x2101, 0x2101, 0x2101},
1236 {0x2102, 0x2102, 0x2102}, {0x2103, 0x2103, 0x2103},
1237 {0x2104, 0x2104, 0x2104}, {0x2105, 0x2105, 0x2105},
1238 {0x2106, 0x2106, 0x2106}, {0x2107, 0x2107, 0x2107},
1239 {0x2108, 0x2108, 0x2108}, {0x2109, 0x2109, 0x2109},
1240 {0x210A, 0x210A, 0x210A}, {0x210B, 0x210B, 0x210B},
1241 {0x210C, 0x210C, 0x210C}, {0x210D, 0x210D, 0x210D},
1242 {0x210E, 0x210E, 0x210E}, {0x210F, 0x210F, 0x210F},
1243 {0x2110, 0x2110, 0x2110}, {0x2111, 0x2111, 0x2111},
1244 {0x2112, 0x2112, 0x2112}, {0x2113, 0x2113, 0x2113},
1245 {0x2114, 0x2114, 0x2114}, {0x2115, 0x2115, 0x2115},
1246 {0x2116, 0x2116, 0x2116}, {0x2117, 0x2117, 0x2117},
1247 {0x2118, 0x2118, 0x2118}, {0x2119, 0x2119, 0x2119},
1248 {0x211A, 0x211A, 0x211A}, {0x211B, 0x211B, 0x211B},
1249 {0x211C, 0x211C, 0x211C}, {0x211D, 0x211D, 0x211D},
1250 {0x211E, 0x211E, 0x211E}, {0x211F, 0x211F, 0x211F},
1251 {0x2120, 0x2120, 0x2120}, {0x2121, 0x2121, 0x2121},
1252 {0x2122, 0x2122, 0x2122}, {0x2123, 0x2123, 0x2123},
1253 {0x2124, 0x2124, 0x2124}, {0x2125, 0x2125, 0x2125},
1254 {0x2126, 0x03C9, 0x2126}, {0x2127, 0x2127, 0x2127},
1255 {0x2128, 0x2128, 0x2128}, {0x2129, 0x2129, 0x2129},
1256 {0x212A, 0x006B, 0x212A}, {0x212B, 0x00E5, 0x212B},
1257 {0x212C, 0x212C, 0x212C}, {0x212D, 0x212D, 0x212D},
1258 {0x212E, 0x212E, 0x212E}, {0x212F, 0x212F, 0x212F},
1259 {0x2130, 0x2130, 0x2130}, {0x2131, 0x2131, 0x2131},
1260 {0x2132, 0x2132, 0x2132}, {0x2133, 0x2133, 0x2133},
1261 {0x2134, 0x2134, 0x2134}, {0x2135, 0x2135, 0x2135},
1262 {0x2136, 0x2136, 0x2136}, {0x2137, 0x2137, 0x2137},
1263 {0x2138, 0x2138, 0x2138}, {0x2139, 0x2139, 0x2139},
1264 {0x213A, 0x213A, 0x213A}, {0x213B, 0x213B, 0x213B},
1265 {0x213C, 0x213C, 0x213C}, {0x213D, 0x213D, 0x213D},
1266 {0x213E, 0x213E, 0x213E}, {0x213F, 0x213F, 0x213F},
1267 {0x2140, 0x2140, 0x2140}, {0x2141, 0x2141, 0x2141},
1268 {0x2142, 0x2142, 0x2142}, {0x2143, 0x2143, 0x2143},
1269 {0x2144, 0x2144, 0x2144}, {0x2145, 0x2145, 0x2145},
1270 {0x2146, 0x2146, 0x2146}, {0x2147, 0x2147, 0x2147},
1271 {0x2148, 0x2148, 0x2148}, {0x2149, 0x2149, 0x2149},
1272 {0x214A, 0x214A, 0x214A}, {0x214B, 0x214B, 0x214B},
1273 {0x214C, 0x214C, 0x214C}, {0x214D, 0x214D, 0x214D},
1274 {0x214E, 0x214E, 0x214E}, {0x214F, 0x214F, 0x214F},
1275 {0x2150, 0x2150, 0x2150}, {0x2151, 0x2151, 0x2151},
1276 {0x2152, 0x2152, 0x2152}, {0x2153, 0x2153, 0x2153},
1277 {0x2154, 0x2154, 0x2154}, {0x2155, 0x2155, 0x2155},
1278 {0x2156, 0x2156, 0x2156}, {0x2157, 0x2157, 0x2157},
1279 {0x2158, 0x2158, 0x2158}, {0x2159, 0x2159, 0x2159},
1280 {0x215A, 0x215A, 0x215A}, {0x215B, 0x215B, 0x215B},
1281 {0x215C, 0x215C, 0x215C}, {0x215D, 0x215D, 0x215D},
1282 {0x215E, 0x215E, 0x215E}, {0x215F, 0x215F, 0x215F},
1283 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161},
1284 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163},
1285 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165},
1286 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167},
1287 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169},
1288 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B},
1289 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D},
1290 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F},
1291 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161},
1292 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163},
1293 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165},
1294 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167},
1295 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169},
1296 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B},
1297 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D},
1298 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F},
1299 {0x2180, 0x2180, 0x2180}, {0x2181, 0x2181, 0x2181},
1300 {0x2182, 0x2182, 0x2182}, {0x2183, 0x2183, 0x2183},
1301 {0x2184, 0x2184, 0x2184}, {0x2185, 0x2185, 0x2185},
1302 {0x2186, 0x2186, 0x2186}, {0x2187, 0x2187, 0x2187},
1303 {0x2188, 0x2188, 0x2188}, {0x2189, 0x2189, 0x2189},
1304 {0x218A, 0x218A, 0x218A}, {0x218B, 0x218B, 0x218B},
1305 {0x218C, 0x218C, 0x218C}, {0x218D, 0x218D, 0x218D},
1306 {0x218E, 0x218E, 0x218E}, {0x218F, 0x218F, 0x218F},
1307 {0x2190, 0x2190, 0x2190}, {0x2191, 0x2191, 0x2191},
1308 {0x2192, 0x2192, 0x2192}, {0x2193, 0x2193, 0x2193},
1309 {0x2194, 0x2194, 0x2194}, {0x2195, 0x2195, 0x2195},
1310 {0x2196, 0x2196, 0x2196}, {0x2197, 0x2197, 0x2197},
1311 {0x2198, 0x2198, 0x2198}, {0x2199, 0x2199, 0x2199},
1312 {0x219A, 0x219A, 0x219A}, {0x219B, 0x219B, 0x219B},
1313 {0x219C, 0x219C, 0x219C}, {0x219D, 0x219D, 0x219D},
1314 {0x219E, 0x219E, 0x219E}, {0x219F, 0x219F, 0x219F},
1315 {0x21A0, 0x21A0, 0x21A0}, {0x21A1, 0x21A1, 0x21A1},
1316 {0x21A2, 0x21A2, 0x21A2}, {0x21A3, 0x21A3, 0x21A3},
1317 {0x21A4, 0x21A4, 0x21A4}, {0x21A5, 0x21A5, 0x21A5},
1318 {0x21A6, 0x21A6, 0x21A6}, {0x21A7, 0x21A7, 0x21A7},
1319 {0x21A8, 0x21A8, 0x21A8}, {0x21A9, 0x21A9, 0x21A9},
1320 {0x21AA, 0x21AA, 0x21AA}, {0x21AB, 0x21AB, 0x21AB},
1321 {0x21AC, 0x21AC, 0x21AC}, {0x21AD, 0x21AD, 0x21AD},
1322 {0x21AE, 0x21AE, 0x21AE}, {0x21AF, 0x21AF, 0x21AF},
1323 {0x21B0, 0x21B0, 0x21B0}, {0x21B1, 0x21B1, 0x21B1},
1324 {0x21B2, 0x21B2, 0x21B2}, {0x21B3, 0x21B3, 0x21B3},
1325 {0x21B4, 0x21B4, 0x21B4}, {0x21B5, 0x21B5, 0x21B5},
1326 {0x21B6, 0x21B6, 0x21B6}, {0x21B7, 0x21B7, 0x21B7},
1327 {0x21B8, 0x21B8, 0x21B8}, {0x21B9, 0x21B9, 0x21B9},
1328 {0x21BA, 0x21BA, 0x21BA}, {0x21BB, 0x21BB, 0x21BB},
1329 {0x21BC, 0x21BC, 0x21BC}, {0x21BD, 0x21BD, 0x21BD},
1330 {0x21BE, 0x21BE, 0x21BE}, {0x21BF, 0x21BF, 0x21BF},
1331 {0x21C0, 0x21C0, 0x21C0}, {0x21C1, 0x21C1, 0x21C1},
1332 {0x21C2, 0x21C2, 0x21C2}, {0x21C3, 0x21C3, 0x21C3},
1333 {0x21C4, 0x21C4, 0x21C4}, {0x21C5, 0x21C5, 0x21C5},
1334 {0x21C6, 0x21C6, 0x21C6}, {0x21C7, 0x21C7, 0x21C7},
1335 {0x21C8, 0x21C8, 0x21C8}, {0x21C9, 0x21C9, 0x21C9},
1336 {0x21CA, 0x21CA, 0x21CA}, {0x21CB, 0x21CB, 0x21CB},
1337 {0x21CC, 0x21CC, 0x21CC}, {0x21CD, 0x21CD, 0x21CD},
1338 {0x21CE, 0x21CE, 0x21CE}, {0x21CF, 0x21CF, 0x21CF},
1339 {0x21D0, 0x21D0, 0x21D0}, {0x21D1, 0x21D1, 0x21D1},
1340 {0x21D2, 0x21D2, 0x21D2}, {0x21D3, 0x21D3, 0x21D3},
1341 {0x21D4, 0x21D4, 0x21D4}, {0x21D5, 0x21D5, 0x21D5},
1342 {0x21D6, 0x21D6, 0x21D6}, {0x21D7, 0x21D7, 0x21D7},
1343 {0x21D8, 0x21D8, 0x21D8}, {0x21D9, 0x21D9, 0x21D9},
1344 {0x21DA, 0x21DA, 0x21DA}, {0x21DB, 0x21DB, 0x21DB},
1345 {0x21DC, 0x21DC, 0x21DC}, {0x21DD, 0x21DD, 0x21DD},
1346 {0x21DE, 0x21DE, 0x21DE}, {0x21DF, 0x21DF, 0x21DF},
1347 {0x21E0, 0x21E0, 0x21E0}, {0x21E1, 0x21E1, 0x21E1},
1348 {0x21E2, 0x21E2, 0x21E2}, {0x21E3, 0x21E3, 0x21E3},
1349 {0x21E4, 0x21E4, 0x21E4}, {0x21E5, 0x21E5, 0x21E5},
1350 {0x21E6, 0x21E6, 0x21E6}, {0x21E7, 0x21E7, 0x21E7},
1351 {0x21E8, 0x21E8, 0x21E8}, {0x21E9, 0x21E9, 0x21E9},
1352 {0x21EA, 0x21EA, 0x21EA}, {0x21EB, 0x21EB, 0x21EB},
1353 {0x21EC, 0x21EC, 0x21EC}, {0x21ED, 0x21ED, 0x21ED},
1354 {0x21EE, 0x21EE, 0x21EE}, {0x21EF, 0x21EF, 0x21EF},
1355 {0x21F0, 0x21F0, 0x21F0}, {0x21F1, 0x21F1, 0x21F1},
1356 {0x21F2, 0x21F2, 0x21F2}, {0x21F3, 0x21F3, 0x21F3},
1357 {0x21F4, 0x21F4, 0x21F4}, {0x21F5, 0x21F5, 0x21F5},
1358 {0x21F6, 0x21F6, 0x21F6}, {0x21F7, 0x21F7, 0x21F7},
1359 {0x21F8, 0x21F8, 0x21F8}, {0x21F9, 0x21F9, 0x21F9},
1360 {0x21FA, 0x21FA, 0x21FA}, {0x21FB, 0x21FB, 0x21FB},
1361 {0x21FC, 0x21FC, 0x21FC}, {0x21FD, 0x21FD, 0x21FD},
1362 {0x21FE, 0x21FE, 0x21FE}, {0x21FF, 0x21FF, 0x21FF}};
1363
1364 static const MY_UNICASE_CHARACTER plane24[] = {
1365 {0x2400, 0x2400, 0x2400}, {0x2401, 0x2401, 0x2401},
1366 {0x2402, 0x2402, 0x2402}, {0x2403, 0x2403, 0x2403},
1367 {0x2404, 0x2404, 0x2404}, {0x2405, 0x2405, 0x2405},
1368 {0x2406, 0x2406, 0x2406}, {0x2407, 0x2407, 0x2407},
1369 {0x2408, 0x2408, 0x2408}, {0x2409, 0x2409, 0x2409},
1370 {0x240A, 0x240A, 0x240A}, {0x240B, 0x240B, 0x240B},
1371 {0x240C, 0x240C, 0x240C}, {0x240D, 0x240D, 0x240D},
1372 {0x240E, 0x240E, 0x240E}, {0x240F, 0x240F, 0x240F},
1373 {0x2410, 0x2410, 0x2410}, {0x2411, 0x2411, 0x2411},
1374 {0x2412, 0x2412, 0x2412}, {0x2413, 0x2413, 0x2413},
1375 {0x2414, 0x2414, 0x2414}, {0x2415, 0x2415, 0x2415},
1376 {0x2416, 0x2416, 0x2416}, {0x2417, 0x2417, 0x2417},
1377 {0x2418, 0x2418, 0x2418}, {0x2419, 0x2419, 0x2419},
1378 {0x241A, 0x241A, 0x241A}, {0x241B, 0x241B, 0x241B},
1379 {0x241C, 0x241C, 0x241C}, {0x241D, 0x241D, 0x241D},
1380 {0x241E, 0x241E, 0x241E}, {0x241F, 0x241F, 0x241F},
1381 {0x2420, 0x2420, 0x2420}, {0x2421, 0x2421, 0x2421},
1382 {0x2422, 0x2422, 0x2422}, {0x2423, 0x2423, 0x2423},
1383 {0x2424, 0x2424, 0x2424}, {0x2425, 0x2425, 0x2425},
1384 {0x2426, 0x2426, 0x2426}, {0x2427, 0x2427, 0x2427},
1385 {0x2428, 0x2428, 0x2428}, {0x2429, 0x2429, 0x2429},
1386 {0x242A, 0x242A, 0x242A}, {0x242B, 0x242B, 0x242B},
1387 {0x242C, 0x242C, 0x242C}, {0x242D, 0x242D, 0x242D},
1388 {0x242E, 0x242E, 0x242E}, {0x242F, 0x242F, 0x242F},
1389 {0x2430, 0x2430, 0x2430}, {0x2431, 0x2431, 0x2431},
1390 {0x2432, 0x2432, 0x2432}, {0x2433, 0x2433, 0x2433},
1391 {0x2434, 0x2434, 0x2434}, {0x2435, 0x2435, 0x2435},
1392 {0x2436, 0x2436, 0x2436}, {0x2437, 0x2437, 0x2437},
1393 {0x2438, 0x2438, 0x2438}, {0x2439, 0x2439, 0x2439},
1394 {0x243A, 0x243A, 0x243A}, {0x243B, 0x243B, 0x243B},
1395 {0x243C, 0x243C, 0x243C}, {0x243D, 0x243D, 0x243D},
1396 {0x243E, 0x243E, 0x243E}, {0x243F, 0x243F, 0x243F},
1397 {0x2440, 0x2440, 0x2440}, {0x2441, 0x2441, 0x2441},
1398 {0x2442, 0x2442, 0x2442}, {0x2443, 0x2443, 0x2443},
1399 {0x2444, 0x2444, 0x2444}, {0x2445, 0x2445, 0x2445},
1400 {0x2446, 0x2446, 0x2446}, {0x2447, 0x2447, 0x2447},
1401 {0x2448, 0x2448, 0x2448}, {0x2449, 0x2449, 0x2449},
1402 {0x244A, 0x244A, 0x244A}, {0x244B, 0x244B, 0x244B},
1403 {0x244C, 0x244C, 0x244C}, {0x244D, 0x244D, 0x244D},
1404 {0x244E, 0x244E, 0x244E}, {0x244F, 0x244F, 0x244F},
1405 {0x2450, 0x2450, 0x2450}, {0x2451, 0x2451, 0x2451},
1406 {0x2452, 0x2452, 0x2452}, {0x2453, 0x2453, 0x2453},
1407 {0x2454, 0x2454, 0x2454}, {0x2455, 0x2455, 0x2455},
1408 {0x2456, 0x2456, 0x2456}, {0x2457, 0x2457, 0x2457},
1409 {0x2458, 0x2458, 0x2458}, {0x2459, 0x2459, 0x2459},
1410 {0x245A, 0x245A, 0x245A}, {0x245B, 0x245B, 0x245B},
1411 {0x245C, 0x245C, 0x245C}, {0x245D, 0x245D, 0x245D},
1412 {0x245E, 0x245E, 0x245E}, {0x245F, 0x245F, 0x245F},
1413 {0x2460, 0x2460, 0x2460}, {0x2461, 0x2461, 0x2461},
1414 {0x2462, 0x2462, 0x2462}, {0x2463, 0x2463, 0x2463},
1415 {0x2464, 0x2464, 0x2464}, {0x2465, 0x2465, 0x2465},
1416 {0x2466, 0x2466, 0x2466}, {0x2467, 0x2467, 0x2467},
1417 {0x2468, 0x2468, 0x2468}, {0x2469, 0x2469, 0x2469},
1418 {0x246A, 0x246A, 0x246A}, {0x246B, 0x246B, 0x246B},
1419 {0x246C, 0x246C, 0x246C}, {0x246D, 0x246D, 0x246D},
1420 {0x246E, 0x246E, 0x246E}, {0x246F, 0x246F, 0x246F},
1421 {0x2470, 0x2470, 0x2470}, {0x2471, 0x2471, 0x2471},
1422 {0x2472, 0x2472, 0x2472}, {0x2473, 0x2473, 0x2473},
1423 {0x2474, 0x2474, 0x2474}, {0x2475, 0x2475, 0x2475},
1424 {0x2476, 0x2476, 0x2476}, {0x2477, 0x2477, 0x2477},
1425 {0x2478, 0x2478, 0x2478}, {0x2479, 0x2479, 0x2479},
1426 {0x247A, 0x247A, 0x247A}, {0x247B, 0x247B, 0x247B},
1427 {0x247C, 0x247C, 0x247C}, {0x247D, 0x247D, 0x247D},
1428 {0x247E, 0x247E, 0x247E}, {0x247F, 0x247F, 0x247F},
1429 {0x2480, 0x2480, 0x2480}, {0x2481, 0x2481, 0x2481},
1430 {0x2482, 0x2482, 0x2482}, {0x2483, 0x2483, 0x2483},
1431 {0x2484, 0x2484, 0x2484}, {0x2485, 0x2485, 0x2485},
1432 {0x2486, 0x2486, 0x2486}, {0x2487, 0x2487, 0x2487},
1433 {0x2488, 0x2488, 0x2488}, {0x2489, 0x2489, 0x2489},
1434 {0x248A, 0x248A, 0x248A}, {0x248B, 0x248B, 0x248B},
1435 {0x248C, 0x248C, 0x248C}, {0x248D, 0x248D, 0x248D},
1436 {0x248E, 0x248E, 0x248E}, {0x248F, 0x248F, 0x248F},
1437 {0x2490, 0x2490, 0x2490}, {0x2491, 0x2491, 0x2491},
1438 {0x2492, 0x2492, 0x2492}, {0x2493, 0x2493, 0x2493},
1439 {0x2494, 0x2494, 0x2494}, {0x2495, 0x2495, 0x2495},
1440 {0x2496, 0x2496, 0x2496}, {0x2497, 0x2497, 0x2497},
1441 {0x2498, 0x2498, 0x2498}, {0x2499, 0x2499, 0x2499},
1442 {0x249A, 0x249A, 0x249A}, {0x249B, 0x249B, 0x249B},
1443 {0x249C, 0x249C, 0x249C}, {0x249D, 0x249D, 0x249D},
1444 {0x249E, 0x249E, 0x249E}, {0x249F, 0x249F, 0x249F},
1445 {0x24A0, 0x24A0, 0x24A0}, {0x24A1, 0x24A1, 0x24A1},
1446 {0x24A2, 0x24A2, 0x24A2}, {0x24A3, 0x24A3, 0x24A3},
1447 {0x24A4, 0x24A4, 0x24A4}, {0x24A5, 0x24A5, 0x24A5},
1448 {0x24A6, 0x24A6, 0x24A6}, {0x24A7, 0x24A7, 0x24A7},
1449 {0x24A8, 0x24A8, 0x24A8}, {0x24A9, 0x24A9, 0x24A9},
1450 {0x24AA, 0x24AA, 0x24AA}, {0x24AB, 0x24AB, 0x24AB},
1451 {0x24AC, 0x24AC, 0x24AC}, {0x24AD, 0x24AD, 0x24AD},
1452 {0x24AE, 0x24AE, 0x24AE}, {0x24AF, 0x24AF, 0x24AF},
1453 {0x24B0, 0x24B0, 0x24B0}, {0x24B1, 0x24B1, 0x24B1},
1454 {0x24B2, 0x24B2, 0x24B2}, {0x24B3, 0x24B3, 0x24B3},
1455 {0x24B4, 0x24B4, 0x24B4}, {0x24B5, 0x24B5, 0x24B5},
1456 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7},
1457 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9},
1458 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB},
1459 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD},
1460 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF},
1461 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1},
1462 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3},
1463 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5},
1464 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7},
1465 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9},
1466 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB},
1467 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD},
1468 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF},
1469 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7},
1470 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9},
1471 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB},
1472 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD},
1473 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF},
1474 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1},
1475 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3},
1476 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5},
1477 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7},
1478 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9},
1479 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB},
1480 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD},
1481 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF},
1482 {0x24EA, 0x24EA, 0x24EA}, {0x24EB, 0x24EB, 0x24EB},
1483 {0x24EC, 0x24EC, 0x24EC}, {0x24ED, 0x24ED, 0x24ED},
1484 {0x24EE, 0x24EE, 0x24EE}, {0x24EF, 0x24EF, 0x24EF},
1485 {0x24F0, 0x24F0, 0x24F0}, {0x24F1, 0x24F1, 0x24F1},
1486 {0x24F2, 0x24F2, 0x24F2}, {0x24F3, 0x24F3, 0x24F3},
1487 {0x24F4, 0x24F4, 0x24F4}, {0x24F5, 0x24F5, 0x24F5},
1488 {0x24F6, 0x24F6, 0x24F6}, {0x24F7, 0x24F7, 0x24F7},
1489 {0x24F8, 0x24F8, 0x24F8}, {0x24F9, 0x24F9, 0x24F9},
1490 {0x24FA, 0x24FA, 0x24FA}, {0x24FB, 0x24FB, 0x24FB},
1491 {0x24FC, 0x24FC, 0x24FC}, {0x24FD, 0x24FD, 0x24FD},
1492 {0x24FE, 0x24FE, 0x24FE}, {0x24FF, 0x24FF, 0x24FF}};
1493
1494 static const MY_UNICASE_CHARACTER planeFF[] = {
1495 {0xFF00, 0xFF00, 0xFF00}, {0xFF01, 0xFF01, 0xFF01},
1496 {0xFF02, 0xFF02, 0xFF02}, {0xFF03, 0xFF03, 0xFF03},
1497 {0xFF04, 0xFF04, 0xFF04}, {0xFF05, 0xFF05, 0xFF05},
1498 {0xFF06, 0xFF06, 0xFF06}, {0xFF07, 0xFF07, 0xFF07},
1499 {0xFF08, 0xFF08, 0xFF08}, {0xFF09, 0xFF09, 0xFF09},
1500 {0xFF0A, 0xFF0A, 0xFF0A}, {0xFF0B, 0xFF0B, 0xFF0B},
1501 {0xFF0C, 0xFF0C, 0xFF0C}, {0xFF0D, 0xFF0D, 0xFF0D},
1502 {0xFF0E, 0xFF0E, 0xFF0E}, {0xFF0F, 0xFF0F, 0xFF0F},
1503 {0xFF10, 0xFF10, 0xFF10}, {0xFF11, 0xFF11, 0xFF11},
1504 {0xFF12, 0xFF12, 0xFF12}, {0xFF13, 0xFF13, 0xFF13},
1505 {0xFF14, 0xFF14, 0xFF14}, {0xFF15, 0xFF15, 0xFF15},
1506 {0xFF16, 0xFF16, 0xFF16}, {0xFF17, 0xFF17, 0xFF17},
1507 {0xFF18, 0xFF18, 0xFF18}, {0xFF19, 0xFF19, 0xFF19},
1508 {0xFF1A, 0xFF1A, 0xFF1A}, {0xFF1B, 0xFF1B, 0xFF1B},
1509 {0xFF1C, 0xFF1C, 0xFF1C}, {0xFF1D, 0xFF1D, 0xFF1D},
1510 {0xFF1E, 0xFF1E, 0xFF1E}, {0xFF1F, 0xFF1F, 0xFF1F},
1511 {0xFF20, 0xFF20, 0xFF20}, {0xFF21, 0xFF41, 0xFF21},
1512 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23},
1513 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25},
1514 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27},
1515 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29},
1516 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B},
1517 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D},
1518 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F},
1519 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31},
1520 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33},
1521 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35},
1522 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37},
1523 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39},
1524 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF3B, 0xFF3B, 0xFF3B},
1525 {0xFF3C, 0xFF3C, 0xFF3C}, {0xFF3D, 0xFF3D, 0xFF3D},
1526 {0xFF3E, 0xFF3E, 0xFF3E}, {0xFF3F, 0xFF3F, 0xFF3F},
1527 {0xFF40, 0xFF40, 0xFF40}, {0xFF21, 0xFF41, 0xFF21},
1528 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23},
1529 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25},
1530 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27},
1531 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29},
1532 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B},
1533 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D},
1534 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F},
1535 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31},
1536 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33},
1537 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35},
1538 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37},
1539 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39},
1540 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF5B, 0xFF5B, 0xFF5B},
1541 {0xFF5C, 0xFF5C, 0xFF5C}, {0xFF5D, 0xFF5D, 0xFF5D},
1542 {0xFF5E, 0xFF5E, 0xFF5E}, {0xFF5F, 0xFF5F, 0xFF5F},
1543 {0xFF60, 0xFF60, 0xFF60}, {0xFF61, 0xFF61, 0xFF61},
1544 {0xFF62, 0xFF62, 0xFF62}, {0xFF63, 0xFF63, 0xFF63},
1545 {0xFF64, 0xFF64, 0xFF64}, {0xFF65, 0xFF65, 0xFF65},
1546 {0xFF66, 0xFF66, 0xFF66}, {0xFF67, 0xFF67, 0xFF67},
1547 {0xFF68, 0xFF68, 0xFF68}, {0xFF69, 0xFF69, 0xFF69},
1548 {0xFF6A, 0xFF6A, 0xFF6A}, {0xFF6B, 0xFF6B, 0xFF6B},
1549 {0xFF6C, 0xFF6C, 0xFF6C}, {0xFF6D, 0xFF6D, 0xFF6D},
1550 {0xFF6E, 0xFF6E, 0xFF6E}, {0xFF6F, 0xFF6F, 0xFF6F},
1551 {0xFF70, 0xFF70, 0xFF70}, {0xFF71, 0xFF71, 0xFF71},
1552 {0xFF72, 0xFF72, 0xFF72}, {0xFF73, 0xFF73, 0xFF73},
1553 {0xFF74, 0xFF74, 0xFF74}, {0xFF75, 0xFF75, 0xFF75},
1554 {0xFF76, 0xFF76, 0xFF76}, {0xFF77, 0xFF77, 0xFF77},
1555 {0xFF78, 0xFF78, 0xFF78}, {0xFF79, 0xFF79, 0xFF79},
1556 {0xFF7A, 0xFF7A, 0xFF7A}, {0xFF7B, 0xFF7B, 0xFF7B},
1557 {0xFF7C, 0xFF7C, 0xFF7C}, {0xFF7D, 0xFF7D, 0xFF7D},
1558 {0xFF7E, 0xFF7E, 0xFF7E}, {0xFF7F, 0xFF7F, 0xFF7F},
1559 {0xFF80, 0xFF80, 0xFF80}, {0xFF81, 0xFF81, 0xFF81},
1560 {0xFF82, 0xFF82, 0xFF82}, {0xFF83, 0xFF83, 0xFF83},
1561 {0xFF84, 0xFF84, 0xFF84}, {0xFF85, 0xFF85, 0xFF85},
1562 {0xFF86, 0xFF86, 0xFF86}, {0xFF87, 0xFF87, 0xFF87},
1563 {0xFF88, 0xFF88, 0xFF88}, {0xFF89, 0xFF89, 0xFF89},
1564 {0xFF8A, 0xFF8A, 0xFF8A}, {0xFF8B, 0xFF8B, 0xFF8B},
1565 {0xFF8C, 0xFF8C, 0xFF8C}, {0xFF8D, 0xFF8D, 0xFF8D},
1566 {0xFF8E, 0xFF8E, 0xFF8E}, {0xFF8F, 0xFF8F, 0xFF8F},
1567 {0xFF90, 0xFF90, 0xFF90}, {0xFF91, 0xFF91, 0xFF91},
1568 {0xFF92, 0xFF92, 0xFF92}, {0xFF93, 0xFF93, 0xFF93},
1569 {0xFF94, 0xFF94, 0xFF94}, {0xFF95, 0xFF95, 0xFF95},
1570 {0xFF96, 0xFF96, 0xFF96}, {0xFF97, 0xFF97, 0xFF97},
1571 {0xFF98, 0xFF98, 0xFF98}, {0xFF99, 0xFF99, 0xFF99},
1572 {0xFF9A, 0xFF9A, 0xFF9A}, {0xFF9B, 0xFF9B, 0xFF9B},
1573 {0xFF9C, 0xFF9C, 0xFF9C}, {0xFF9D, 0xFF9D, 0xFF9D},
1574 {0xFF9E, 0xFF9E, 0xFF9E}, {0xFF9F, 0xFF9F, 0xFF9F},
1575 {0xFFA0, 0xFFA0, 0xFFA0}, {0xFFA1, 0xFFA1, 0xFFA1},
1576 {0xFFA2, 0xFFA2, 0xFFA2}, {0xFFA3, 0xFFA3, 0xFFA3},
1577 {0xFFA4, 0xFFA4, 0xFFA4}, {0xFFA5, 0xFFA5, 0xFFA5},
1578 {0xFFA6, 0xFFA6, 0xFFA6}, {0xFFA7, 0xFFA7, 0xFFA7},
1579 {0xFFA8, 0xFFA8, 0xFFA8}, {0xFFA9, 0xFFA9, 0xFFA9},
1580 {0xFFAA, 0xFFAA, 0xFFAA}, {0xFFAB, 0xFFAB, 0xFFAB},
1581 {0xFFAC, 0xFFAC, 0xFFAC}, {0xFFAD, 0xFFAD, 0xFFAD},
1582 {0xFFAE, 0xFFAE, 0xFFAE}, {0xFFAF, 0xFFAF, 0xFFAF},
1583 {0xFFB0, 0xFFB0, 0xFFB0}, {0xFFB1, 0xFFB1, 0xFFB1},
1584 {0xFFB2, 0xFFB2, 0xFFB2}, {0xFFB3, 0xFFB3, 0xFFB3},
1585 {0xFFB4, 0xFFB4, 0xFFB4}, {0xFFB5, 0xFFB5, 0xFFB5},
1586 {0xFFB6, 0xFFB6, 0xFFB6}, {0xFFB7, 0xFFB7, 0xFFB7},
1587 {0xFFB8, 0xFFB8, 0xFFB8}, {0xFFB9, 0xFFB9, 0xFFB9},
1588 {0xFFBA, 0xFFBA, 0xFFBA}, {0xFFBB, 0xFFBB, 0xFFBB},
1589 {0xFFBC, 0xFFBC, 0xFFBC}, {0xFFBD, 0xFFBD, 0xFFBD},
1590 {0xFFBE, 0xFFBE, 0xFFBE}, {0xFFBF, 0xFFBF, 0xFFBF},
1591 {0xFFC0, 0xFFC0, 0xFFC0}, {0xFFC1, 0xFFC1, 0xFFC1},
1592 {0xFFC2, 0xFFC2, 0xFFC2}, {0xFFC3, 0xFFC3, 0xFFC3},
1593 {0xFFC4, 0xFFC4, 0xFFC4}, {0xFFC5, 0xFFC5, 0xFFC5},
1594 {0xFFC6, 0xFFC6, 0xFFC6}, {0xFFC7, 0xFFC7, 0xFFC7},
1595 {0xFFC8, 0xFFC8, 0xFFC8}, {0xFFC9, 0xFFC9, 0xFFC9},
1596 {0xFFCA, 0xFFCA, 0xFFCA}, {0xFFCB, 0xFFCB, 0xFFCB},
1597 {0xFFCC, 0xFFCC, 0xFFCC}, {0xFFCD, 0xFFCD, 0xFFCD},
1598 {0xFFCE, 0xFFCE, 0xFFCE}, {0xFFCF, 0xFFCF, 0xFFCF},
1599 {0xFFD0, 0xFFD0, 0xFFD0}, {0xFFD1, 0xFFD1, 0xFFD1},
1600 {0xFFD2, 0xFFD2, 0xFFD2}, {0xFFD3, 0xFFD3, 0xFFD3},
1601 {0xFFD4, 0xFFD4, 0xFFD4}, {0xFFD5, 0xFFD5, 0xFFD5},
1602 {0xFFD6, 0xFFD6, 0xFFD6}, {0xFFD7, 0xFFD7, 0xFFD7},
1603 {0xFFD8, 0xFFD8, 0xFFD8}, {0xFFD9, 0xFFD9, 0xFFD9},
1604 {0xFFDA, 0xFFDA, 0xFFDA}, {0xFFDB, 0xFFDB, 0xFFDB},
1605 {0xFFDC, 0xFFDC, 0xFFDC}, {0xFFDD, 0xFFDD, 0xFFDD},
1606 {0xFFDE, 0xFFDE, 0xFFDE}, {0xFFDF, 0xFFDF, 0xFFDF},
1607 {0xFFE0, 0xFFE0, 0xFFE0}, {0xFFE1, 0xFFE1, 0xFFE1},
1608 {0xFFE2, 0xFFE2, 0xFFE2}, {0xFFE3, 0xFFE3, 0xFFE3},
1609 {0xFFE4, 0xFFE4, 0xFFE4}, {0xFFE5, 0xFFE5, 0xFFE5},
1610 {0xFFE6, 0xFFE6, 0xFFE6}, {0xFFE7, 0xFFE7, 0xFFE7},
1611 {0xFFE8, 0xFFE8, 0xFFE8}, {0xFFE9, 0xFFE9, 0xFFE9},
1612 {0xFFEA, 0xFFEA, 0xFFEA}, {0xFFEB, 0xFFEB, 0xFFEB},
1613 {0xFFEC, 0xFFEC, 0xFFEC}, {0xFFED, 0xFFED, 0xFFED},
1614 {0xFFEE, 0xFFEE, 0xFFEE}, {0xFFEF, 0xFFEF, 0xFFEF},
1615 {0xFFF0, 0xFFF0, 0xFFF0}, {0xFFF1, 0xFFF1, 0xFFF1},
1616 {0xFFF2, 0xFFF2, 0xFFF2}, {0xFFF3, 0xFFF3, 0xFFF3},
1617 {0xFFF4, 0xFFF4, 0xFFF4}, {0xFFF5, 0xFFF5, 0xFFF5},
1618 {0xFFF6, 0xFFF6, 0xFFF6}, {0xFFF7, 0xFFF7, 0xFFF7},
1619 {0xFFF8, 0xFFF8, 0xFFF8}, {0xFFF9, 0xFFF9, 0xFFF9},
1620 {0xFFFA, 0xFFFA, 0xFFFA}, {0xFFFB, 0xFFFB, 0xFFFB},
1621 {0xFFFC, 0xFFFC, 0xFFFC}, {0xFFFD, 0xFFFD, 0xFFFD},
1622 {0xFFFE, 0xFFFE, 0xFFFE}, {0xFFFF, 0xFFFF, 0xFFFF}};
1623
1624 static const MY_UNICASE_CHARACTER *my_unicase_pages_default[256] = {
1625 plane00, plane01, plane02, plane03, plane04, plane05, nullptr, nullptr,
1626 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1627 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1628 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, plane1E, plane1F,
1629 nullptr, plane21, nullptr, nullptr, plane24, nullptr, nullptr, nullptr,
1630 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1631 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1632 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1633 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1634 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1635 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1636 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1637 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1638 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1639 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1640 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1641 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1642 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1643 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1644 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1645 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1646 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1647 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1648 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1649 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1650 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1651 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1652 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1653 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1654 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1655 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1656 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, planeFF};
1657
1658 MY_UNICASE_INFO my_unicase_default = {0xFFFF, my_unicase_pages_default};
1659
1660 /*
1661 Reproduce old utf8_general_ci behaviour before we fixed Bug#27877.
1662 */
1663 static const MY_UNICASE_CHARACTER *my_unicase_pages_mysql500[256] = {
1664 plane00_mysql500, plane01, plane02, plane03, plane04, plane05, nullptr,
1665 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1666 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1667 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1668 nullptr, nullptr, plane1E, plane1F, nullptr, plane21, nullptr,
1669 nullptr, plane24, nullptr, nullptr, nullptr, nullptr, nullptr,
1670 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1671 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1672 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1673 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1674 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1675 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1676 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1677 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1678 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1679 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1680 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1681 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1682 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1683 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1684 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1685 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1686 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1687 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1688 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1689 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1690 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1691 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1692 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1693 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1694 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1695 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1696 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1697 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1698 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1699 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1700 nullptr, nullptr, nullptr, planeFF
1701
1702 };
1703
1704 MY_UNICASE_INFO my_unicase_mysql500 = {0xFFFF, my_unicase_pages_mysql500};
1705
1706 /*
1707 Turkish lower/upper mapping:
1708 1. LOWER(0x0049 LATIN CAPITAL LETTER I) ->
1709 0x0131 LATIN SMALL LETTER DOTLESS I
1710 2. UPPER(0x0069 LATIN SMALL LETTER I) ->
1711 0x0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
1712 */
1713
1714 static const MY_UNICASE_CHARACTER turk00[] = {
1715 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001},
1716 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003},
1717 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005},
1718 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007},
1719 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009},
1720 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B},
1721 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D},
1722 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F},
1723 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011},
1724 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013},
1725 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015},
1726 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017},
1727 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019},
1728 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B},
1729 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D},
1730 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F},
1731 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021},
1732 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023},
1733 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025},
1734 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027},
1735 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029},
1736 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B},
1737 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D},
1738 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F},
1739 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031},
1740 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033},
1741 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035},
1742 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037},
1743 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039},
1744 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B},
1745 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D},
1746 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F},
1747 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041},
1748 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
1749 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
1750 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
1751 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0131, 0x0049},
1752 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
1753 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
1754 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
1755 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
1756 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
1757 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
1758 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
1759 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
1760 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B},
1761 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D},
1762 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F},
1763 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041},
1764 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043},
1765 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045},
1766 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047},
1767 {0x0048, 0x0068, 0x0048}, {0x0130, 0x0069, 0x0049},
1768 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B},
1769 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D},
1770 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F},
1771 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051},
1772 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053},
1773 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055},
1774 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057},
1775 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059},
1776 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B},
1777 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D},
1778 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F},
1779 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081},
1780 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083},
1781 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085},
1782 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087},
1783 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089},
1784 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B},
1785 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D},
1786 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F},
1787 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091},
1788 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093},
1789 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095},
1790 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097},
1791 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099},
1792 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B},
1793 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D},
1794 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F},
1795 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1},
1796 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3},
1797 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5},
1798 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7},
1799 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9},
1800 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB},
1801 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD},
1802 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF},
1803 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1},
1804 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3},
1805 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C},
1806 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7},
1807 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9},
1808 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB},
1809 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD},
1810 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF},
1811 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
1812 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
1813 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
1814 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
1815 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
1816 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
1817 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
1818 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
1819 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
1820 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
1821 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
1822 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7},
1823 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
1824 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
1825 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
1826 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x00DF},
1827 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041},
1828 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041},
1829 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041},
1830 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043},
1831 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045},
1832 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045},
1833 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049},
1834 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049},
1835 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E},
1836 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F},
1837 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F},
1838 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7},
1839 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055},
1840 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055},
1841 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059},
1842 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059}};
1843
1844 static const MY_UNICASE_CHARACTER *my_unicase_pages_turkish[256] = {
1845 turk00, plane01, plane02, plane03, plane04, plane05, nullptr, nullptr,
1846 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1847 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1848 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, plane1E, plane1F,
1849 nullptr, plane21, nullptr, nullptr, plane24, nullptr, nullptr, nullptr,
1850 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1851 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1852 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1853 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1854 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1855 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1856 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1857 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1858 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1859 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1860 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1861 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1862 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1863 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1864 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1865 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1866 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1867 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1868 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1869 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1870 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1871 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1872 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1873 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1874 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1875 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
1876 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, planeFF};
1877
1878 MY_UNICASE_INFO my_unicase_turkish = {0xFFFF, my_unicase_pages_turkish};
1879
1880 /* Unicode-5.2.0 case folding information */
1881 static const MY_UNICASE_CHARACTER u520p00[] = {
1882 {0x0000, 0x0000, 0x0000}, {0x0001, 0x0001, 0x0001}, /* 0000 */
1883 {0x0002, 0x0002, 0x0002}, {0x0003, 0x0003, 0x0003}, /* 0002 */
1884 {0x0004, 0x0004, 0x0004}, {0x0005, 0x0005, 0x0005}, /* 0004 */
1885 {0x0006, 0x0006, 0x0006}, {0x0007, 0x0007, 0x0007}, /* 0006 */
1886 {0x0008, 0x0008, 0x0008}, {0x0009, 0x0009, 0x0009}, /* 0008 */
1887 {0x000A, 0x000A, 0x000A}, {0x000B, 0x000B, 0x000B}, /* 000A */
1888 {0x000C, 0x000C, 0x000C}, {0x000D, 0x000D, 0x000D}, /* 000C */
1889 {0x000E, 0x000E, 0x000E}, {0x000F, 0x000F, 0x000F}, /* 000E */
1890 {0x0010, 0x0010, 0x0010}, {0x0011, 0x0011, 0x0011}, /* 0010 */
1891 {0x0012, 0x0012, 0x0012}, {0x0013, 0x0013, 0x0013}, /* 0012 */
1892 {0x0014, 0x0014, 0x0014}, {0x0015, 0x0015, 0x0015}, /* 0014 */
1893 {0x0016, 0x0016, 0x0016}, {0x0017, 0x0017, 0x0017}, /* 0016 */
1894 {0x0018, 0x0018, 0x0018}, {0x0019, 0x0019, 0x0019}, /* 0018 */
1895 {0x001A, 0x001A, 0x001A}, {0x001B, 0x001B, 0x001B}, /* 001A */
1896 {0x001C, 0x001C, 0x001C}, {0x001D, 0x001D, 0x001D}, /* 001C */
1897 {0x001E, 0x001E, 0x001E}, {0x001F, 0x001F, 0x001F}, /* 001E */
1898 {0x0020, 0x0020, 0x0020}, {0x0021, 0x0021, 0x0021}, /* 0020 */
1899 {0x0022, 0x0022, 0x0022}, {0x0023, 0x0023, 0x0023}, /* 0022 */
1900 {0x0024, 0x0024, 0x0024}, {0x0025, 0x0025, 0x0025}, /* 0024 */
1901 {0x0026, 0x0026, 0x0026}, {0x0027, 0x0027, 0x0027}, /* 0026 */
1902 {0x0028, 0x0028, 0x0028}, {0x0029, 0x0029, 0x0029}, /* 0028 */
1903 {0x002A, 0x002A, 0x002A}, {0x002B, 0x002B, 0x002B}, /* 002A */
1904 {0x002C, 0x002C, 0x002C}, {0x002D, 0x002D, 0x002D}, /* 002C */
1905 {0x002E, 0x002E, 0x002E}, {0x002F, 0x002F, 0x002F}, /* 002E */
1906 {0x0030, 0x0030, 0x0030}, {0x0031, 0x0031, 0x0031}, /* 0030 */
1907 {0x0032, 0x0032, 0x0032}, {0x0033, 0x0033, 0x0033}, /* 0032 */
1908 {0x0034, 0x0034, 0x0034}, {0x0035, 0x0035, 0x0035}, /* 0034 */
1909 {0x0036, 0x0036, 0x0036}, {0x0037, 0x0037, 0x0037}, /* 0036 */
1910 {0x0038, 0x0038, 0x0038}, {0x0039, 0x0039, 0x0039}, /* 0038 */
1911 {0x003A, 0x003A, 0x003A}, {0x003B, 0x003B, 0x003B}, /* 003A */
1912 {0x003C, 0x003C, 0x003C}, {0x003D, 0x003D, 0x003D}, /* 003C */
1913 {0x003E, 0x003E, 0x003E}, {0x003F, 0x003F, 0x003F}, /* 003E */
1914 {0x0040, 0x0040, 0x0040}, {0x0041, 0x0061, 0x0041}, /* 0040 */
1915 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043}, /* 0042 */
1916 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045}, /* 0044 */
1917 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047}, /* 0046 */
1918 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049}, /* 0048 */
1919 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B}, /* 004A */
1920 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D}, /* 004C */
1921 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F}, /* 004E */
1922 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051}, /* 0050 */
1923 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053}, /* 0052 */
1924 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055}, /* 0054 */
1925 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057}, /* 0056 */
1926 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059}, /* 0058 */
1927 {0x005A, 0x007A, 0x005A}, {0x005B, 0x005B, 0x005B}, /* 005A */
1928 {0x005C, 0x005C, 0x005C}, {0x005D, 0x005D, 0x005D}, /* 005C */
1929 {0x005E, 0x005E, 0x005E}, {0x005F, 0x005F, 0x005F}, /* 005E */
1930 {0x0060, 0x0060, 0x0060}, {0x0041, 0x0061, 0x0041}, /* 0060 */
1931 {0x0042, 0x0062, 0x0042}, {0x0043, 0x0063, 0x0043}, /* 0062 */
1932 {0x0044, 0x0064, 0x0044}, {0x0045, 0x0065, 0x0045}, /* 0064 */
1933 {0x0046, 0x0066, 0x0046}, {0x0047, 0x0067, 0x0047}, /* 0066 */
1934 {0x0048, 0x0068, 0x0048}, {0x0049, 0x0069, 0x0049}, /* 0068 */
1935 {0x004A, 0x006A, 0x004A}, {0x004B, 0x006B, 0x004B}, /* 006A */
1936 {0x004C, 0x006C, 0x004C}, {0x004D, 0x006D, 0x004D}, /* 006C */
1937 {0x004E, 0x006E, 0x004E}, {0x004F, 0x006F, 0x004F}, /* 006E */
1938 {0x0050, 0x0070, 0x0050}, {0x0051, 0x0071, 0x0051}, /* 0070 */
1939 {0x0052, 0x0072, 0x0052}, {0x0053, 0x0073, 0x0053}, /* 0072 */
1940 {0x0054, 0x0074, 0x0054}, {0x0055, 0x0075, 0x0055}, /* 0074 */
1941 {0x0056, 0x0076, 0x0056}, {0x0057, 0x0077, 0x0057}, /* 0076 */
1942 {0x0058, 0x0078, 0x0058}, {0x0059, 0x0079, 0x0059}, /* 0078 */
1943 {0x005A, 0x007A, 0x005A}, {0x007B, 0x007B, 0x007B}, /* 007A */
1944 {0x007C, 0x007C, 0x007C}, {0x007D, 0x007D, 0x007D}, /* 007C */
1945 {0x007E, 0x007E, 0x007E}, {0x007F, 0x007F, 0x007F}, /* 007E */
1946 {0x0080, 0x0080, 0x0080}, {0x0081, 0x0081, 0x0081}, /* 0080 */
1947 {0x0082, 0x0082, 0x0082}, {0x0083, 0x0083, 0x0083}, /* 0082 */
1948 {0x0084, 0x0084, 0x0084}, {0x0085, 0x0085, 0x0085}, /* 0084 */
1949 {0x0086, 0x0086, 0x0086}, {0x0087, 0x0087, 0x0087}, /* 0086 */
1950 {0x0088, 0x0088, 0x0088}, {0x0089, 0x0089, 0x0089}, /* 0088 */
1951 {0x008A, 0x008A, 0x008A}, {0x008B, 0x008B, 0x008B}, /* 008A */
1952 {0x008C, 0x008C, 0x008C}, {0x008D, 0x008D, 0x008D}, /* 008C */
1953 {0x008E, 0x008E, 0x008E}, {0x008F, 0x008F, 0x008F}, /* 008E */
1954 {0x0090, 0x0090, 0x0090}, {0x0091, 0x0091, 0x0091}, /* 0090 */
1955 {0x0092, 0x0092, 0x0092}, {0x0093, 0x0093, 0x0093}, /* 0092 */
1956 {0x0094, 0x0094, 0x0094}, {0x0095, 0x0095, 0x0095}, /* 0094 */
1957 {0x0096, 0x0096, 0x0096}, {0x0097, 0x0097, 0x0097}, /* 0096 */
1958 {0x0098, 0x0098, 0x0098}, {0x0099, 0x0099, 0x0099}, /* 0098 */
1959 {0x009A, 0x009A, 0x009A}, {0x009B, 0x009B, 0x009B}, /* 009A */
1960 {0x009C, 0x009C, 0x009C}, {0x009D, 0x009D, 0x009D}, /* 009C */
1961 {0x009E, 0x009E, 0x009E}, {0x009F, 0x009F, 0x009F}, /* 009E */
1962 {0x00A0, 0x00A0, 0x00A0}, {0x00A1, 0x00A1, 0x00A1}, /* 00A0 */
1963 {0x00A2, 0x00A2, 0x00A2}, {0x00A3, 0x00A3, 0x00A3}, /* 00A2 */
1964 {0x00A4, 0x00A4, 0x00A4}, {0x00A5, 0x00A5, 0x00A5}, /* 00A4 */
1965 {0x00A6, 0x00A6, 0x00A6}, {0x00A7, 0x00A7, 0x00A7}, /* 00A6 */
1966 {0x00A8, 0x00A8, 0x00A8}, {0x00A9, 0x00A9, 0x00A9}, /* 00A8 */
1967 {0x00AA, 0x00AA, 0x00AA}, {0x00AB, 0x00AB, 0x00AB}, /* 00AA */
1968 {0x00AC, 0x00AC, 0x00AC}, {0x00AD, 0x00AD, 0x00AD}, /* 00AC */
1969 {0x00AE, 0x00AE, 0x00AE}, {0x00AF, 0x00AF, 0x00AF}, /* 00AE */
1970 {0x00B0, 0x00B0, 0x00B0}, {0x00B1, 0x00B1, 0x00B1}, /* 00B0 */
1971 {0x00B2, 0x00B2, 0x00B2}, {0x00B3, 0x00B3, 0x00B3}, /* 00B2 */
1972 {0x00B4, 0x00B4, 0x00B4}, {0x039C, 0x00B5, 0x039C}, /* 00B4 */
1973 {0x00B6, 0x00B6, 0x00B6}, {0x00B7, 0x00B7, 0x00B7}, /* 00B6 */
1974 {0x00B8, 0x00B8, 0x00B8}, {0x00B9, 0x00B9, 0x00B9}, /* 00B8 */
1975 {0x00BA, 0x00BA, 0x00BA}, {0x00BB, 0x00BB, 0x00BB}, /* 00BA */
1976 {0x00BC, 0x00BC, 0x00BC}, {0x00BD, 0x00BD, 0x00BD}, /* 00BC */
1977 {0x00BE, 0x00BE, 0x00BE}, {0x00BF, 0x00BF, 0x00BF}, /* 00BE */
1978 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041}, /* 00C0 */
1979 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041}, /* 00C2 */
1980 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041}, /* 00C4 */
1981 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043}, /* 00C6 */
1982 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045}, /* 00C8 */
1983 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045}, /* 00CA */
1984 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049}, /* 00CC */
1985 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049}, /* 00CE */
1986 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E}, /* 00D0 */
1987 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F}, /* 00D2 */
1988 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F}, /* 00D4 */
1989 {0x00D6, 0x00F6, 0x004F}, {0x00D7, 0x00D7, 0x00D7}, /* 00D6 */
1990 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055}, /* 00D8 */
1991 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055}, /* 00DA */
1992 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059}, /* 00DC */
1993 {0x00DE, 0x00FE, 0x00DE}, {0x00DF, 0x00DF, 0x0053}, /* 00DE */
1994 {0x00C0, 0x00E0, 0x0041}, {0x00C1, 0x00E1, 0x0041}, /* 00E0 */
1995 {0x00C2, 0x00E2, 0x0041}, {0x00C3, 0x00E3, 0x0041}, /* 00E2 */
1996 {0x00C4, 0x00E4, 0x0041}, {0x00C5, 0x00E5, 0x0041}, /* 00E4 */
1997 {0x00C6, 0x00E6, 0x00C6}, {0x00C7, 0x00E7, 0x0043}, /* 00E6 */
1998 {0x00C8, 0x00E8, 0x0045}, {0x00C9, 0x00E9, 0x0045}, /* 00E8 */
1999 {0x00CA, 0x00EA, 0x0045}, {0x00CB, 0x00EB, 0x0045}, /* 00EA */
2000 {0x00CC, 0x00EC, 0x0049}, {0x00CD, 0x00ED, 0x0049}, /* 00EC */
2001 {0x00CE, 0x00EE, 0x0049}, {0x00CF, 0x00EF, 0x0049}, /* 00EE */
2002 {0x00D0, 0x00F0, 0x00D0}, {0x00D1, 0x00F1, 0x004E}, /* 00F0 */
2003 {0x00D2, 0x00F2, 0x004F}, {0x00D3, 0x00F3, 0x004F}, /* 00F2 */
2004 {0x00D4, 0x00F4, 0x004F}, {0x00D5, 0x00F5, 0x004F}, /* 00F4 */
2005 {0x00D6, 0x00F6, 0x004F}, {0x00F7, 0x00F7, 0x00F7}, /* 00F6 */
2006 {0x00D8, 0x00F8, 0x00D8}, {0x00D9, 0x00F9, 0x0055}, /* 00F8 */
2007 {0x00DA, 0x00FA, 0x0055}, {0x00DB, 0x00FB, 0x0055}, /* 00FA */
2008 {0x00DC, 0x00FC, 0x0055}, {0x00DD, 0x00FD, 0x0059}, /* 00FC */
2009 {0x00DE, 0x00FE, 0x00DE}, {0x0178, 0x00FF, 0x0059} /* 00FE */
2010 };
2011
2012 static const MY_UNICASE_CHARACTER u520p01[] = {
2013 {0x0100, 0x0101, 0x0041}, {0x0100, 0x0101, 0x0041}, /* 0100 */
2014 {0x0102, 0x0103, 0x0041}, {0x0102, 0x0103, 0x0041}, /* 0102 */
2015 {0x0104, 0x0105, 0x0041}, {0x0104, 0x0105, 0x0041}, /* 0104 */
2016 {0x0106, 0x0107, 0x0043}, {0x0106, 0x0107, 0x0043}, /* 0106 */
2017 {0x0108, 0x0109, 0x0043}, {0x0108, 0x0109, 0x0043}, /* 0108 */
2018 {0x010A, 0x010B, 0x0043}, {0x010A, 0x010B, 0x0043}, /* 010A */
2019 {0x010C, 0x010D, 0x0043}, {0x010C, 0x010D, 0x0043}, /* 010C */
2020 {0x010E, 0x010F, 0x0044}, {0x010E, 0x010F, 0x0044}, /* 010E */
2021 {0x0110, 0x0111, 0x0110}, {0x0110, 0x0111, 0x0110}, /* 0110 */
2022 {0x0112, 0x0113, 0x0045}, {0x0112, 0x0113, 0x0045}, /* 0112 */
2023 {0x0114, 0x0115, 0x0045}, {0x0114, 0x0115, 0x0045}, /* 0114 */
2024 {0x0116, 0x0117, 0x0045}, {0x0116, 0x0117, 0x0045}, /* 0116 */
2025 {0x0118, 0x0119, 0x0045}, {0x0118, 0x0119, 0x0045}, /* 0118 */
2026 {0x011A, 0x011B, 0x0045}, {0x011A, 0x011B, 0x0045}, /* 011A */
2027 {0x011C, 0x011D, 0x0047}, {0x011C, 0x011D, 0x0047}, /* 011C */
2028 {0x011E, 0x011F, 0x0047}, {0x011E, 0x011F, 0x0047}, /* 011E */
2029 {0x0120, 0x0121, 0x0047}, {0x0120, 0x0121, 0x0047}, /* 0120 */
2030 {0x0122, 0x0123, 0x0047}, {0x0122, 0x0123, 0x0047}, /* 0122 */
2031 {0x0124, 0x0125, 0x0048}, {0x0124, 0x0125, 0x0048}, /* 0124 */
2032 {0x0126, 0x0127, 0x0126}, {0x0126, 0x0127, 0x0126}, /* 0126 */
2033 {0x0128, 0x0129, 0x0049}, {0x0128, 0x0129, 0x0049}, /* 0128 */
2034 {0x012A, 0x012B, 0x0049}, {0x012A, 0x012B, 0x0049}, /* 012A */
2035 {0x012C, 0x012D, 0x0049}, {0x012C, 0x012D, 0x0049}, /* 012C */
2036 {0x012E, 0x012F, 0x0049}, {0x012E, 0x012F, 0x0049}, /* 012E */
2037 {0x0130, 0x0069, 0x0049}, {0x0049, 0x0131, 0x0049}, /* 0130 */
2038 {0x0132, 0x0133, 0x0132}, {0x0132, 0x0133, 0x0132}, /* 0132 */
2039 {0x0134, 0x0135, 0x004A}, {0x0134, 0x0135, 0x004A}, /* 0134 */
2040 {0x0136, 0x0137, 0x004B}, {0x0136, 0x0137, 0x004B}, /* 0136 */
2041 {0x0138, 0x0138, 0x0138}, {0x0139, 0x013A, 0x004C}, /* 0138 */
2042 {0x0139, 0x013A, 0x004C}, {0x013B, 0x013C, 0x004C}, /* 013A */
2043 {0x013B, 0x013C, 0x004C}, {0x013D, 0x013E, 0x004C}, /* 013C */
2044 {0x013D, 0x013E, 0x004C}, {0x013F, 0x0140, 0x013F}, /* 013E */
2045 {0x013F, 0x0140, 0x013F}, {0x0141, 0x0142, 0x0141}, /* 0140 */
2046 {0x0141, 0x0142, 0x0141}, {0x0143, 0x0144, 0x004E}, /* 0142 */
2047 {0x0143, 0x0144, 0x004E}, {0x0145, 0x0146, 0x004E}, /* 0144 */
2048 {0x0145, 0x0146, 0x004E}, {0x0147, 0x0148, 0x004E}, /* 0146 */
2049 {0x0147, 0x0148, 0x004E}, {0x0149, 0x0149, 0x0149}, /* 0148 */
2050 {0x014A, 0x014B, 0x014A}, {0x014A, 0x014B, 0x014A}, /* 014A */
2051 {0x014C, 0x014D, 0x004F}, {0x014C, 0x014D, 0x004F}, /* 014C */
2052 {0x014E, 0x014F, 0x004F}, {0x014E, 0x014F, 0x004F}, /* 014E */
2053 {0x0150, 0x0151, 0x004F}, {0x0150, 0x0151, 0x004F}, /* 0150 */
2054 {0x0152, 0x0153, 0x0152}, {0x0152, 0x0153, 0x0152}, /* 0152 */
2055 {0x0154, 0x0155, 0x0052}, {0x0154, 0x0155, 0x0052}, /* 0154 */
2056 {0x0156, 0x0157, 0x0052}, {0x0156, 0x0157, 0x0052}, /* 0156 */
2057 {0x0158, 0x0159, 0x0052}, {0x0158, 0x0159, 0x0052}, /* 0158 */
2058 {0x015A, 0x015B, 0x0053}, {0x015A, 0x015B, 0x0053}, /* 015A */
2059 {0x015C, 0x015D, 0x0053}, {0x015C, 0x015D, 0x0053}, /* 015C */
2060 {0x015E, 0x015F, 0x0053}, {0x015E, 0x015F, 0x0053}, /* 015E */
2061 {0x0160, 0x0161, 0x0053}, {0x0160, 0x0161, 0x0053}, /* 0160 */
2062 {0x0162, 0x0163, 0x0054}, {0x0162, 0x0163, 0x0054}, /* 0162 */
2063 {0x0164, 0x0165, 0x0054}, {0x0164, 0x0165, 0x0054}, /* 0164 */
2064 {0x0166, 0x0167, 0x0166}, {0x0166, 0x0167, 0x0166}, /* 0166 */
2065 {0x0168, 0x0169, 0x0055}, {0x0168, 0x0169, 0x0055}, /* 0168 */
2066 {0x016A, 0x016B, 0x0055}, {0x016A, 0x016B, 0x0055}, /* 016A */
2067 {0x016C, 0x016D, 0x0055}, {0x016C, 0x016D, 0x0055}, /* 016C */
2068 {0x016E, 0x016F, 0x0055}, {0x016E, 0x016F, 0x0055}, /* 016E */
2069 {0x0170, 0x0171, 0x0055}, {0x0170, 0x0171, 0x0055}, /* 0170 */
2070 {0x0172, 0x0173, 0x0055}, {0x0172, 0x0173, 0x0055}, /* 0172 */
2071 {0x0174, 0x0175, 0x0057}, {0x0174, 0x0175, 0x0057}, /* 0174 */
2072 {0x0176, 0x0177, 0x0059}, {0x0176, 0x0177, 0x0059}, /* 0176 */
2073 {0x0178, 0x00FF, 0x0059}, {0x0179, 0x017A, 0x005A}, /* 0178 */
2074 {0x0179, 0x017A, 0x005A}, {0x017B, 0x017C, 0x005A}, /* 017A */
2075 {0x017B, 0x017C, 0x005A}, {0x017D, 0x017E, 0x005A}, /* 017C */
2076 {0x017D, 0x017E, 0x005A}, {0x0053, 0x017F, 0x0053}, /* 017E */
2077 {0x0243, 0x0180, 0x0243}, {0x0181, 0x0253, 0x0181}, /* 0180 */
2078 {0x0182, 0x0183, 0x0182}, {0x0182, 0x0183, 0x0182}, /* 0182 */
2079 {0x0184, 0x0185, 0x0184}, {0x0184, 0x0185, 0x0184}, /* 0184 */
2080 {0x0186, 0x0254, 0x0186}, {0x0187, 0x0188, 0x0187}, /* 0186 */
2081 {0x0187, 0x0188, 0x0187}, {0x0189, 0x0256, 0x0189}, /* 0188 */
2082 {0x018A, 0x0257, 0x018A}, {0x018B, 0x018C, 0x018B}, /* 018A */
2083 {0x018B, 0x018C, 0x018B}, {0x018D, 0x018D, 0x018D}, /* 018C */
2084 {0x018E, 0x01DD, 0x018E}, {0x018F, 0x0259, 0x018F}, /* 018E */
2085 {0x0190, 0x025B, 0x0190}, {0x0191, 0x0192, 0x0191}, /* 0190 */
2086 {0x0191, 0x0192, 0x0191}, {0x0193, 0x0260, 0x0193}, /* 0192 */
2087 {0x0194, 0x0263, 0x0194}, {0x01F6, 0x0195, 0x01F6}, /* 0194 */
2088 {0x0196, 0x0269, 0x0196}, {0x0197, 0x0268, 0x0197}, /* 0196 */
2089 {0x0198, 0x0199, 0x0198}, {0x0198, 0x0199, 0x0198}, /* 0198 */
2090 {0x023D, 0x019A, 0x023D}, {0x019B, 0x019B, 0x019B}, /* 019A */
2091 {0x019C, 0x026F, 0x019C}, {0x019D, 0x0272, 0x019D}, /* 019C */
2092 {0x0220, 0x019E, 0x0220}, {0x019F, 0x0275, 0x019F}, /* 019E */
2093 {0x01A0, 0x01A1, 0x004F}, {0x01A0, 0x01A1, 0x004F}, /* 01A0 */
2094 {0x01A2, 0x01A3, 0x01A2}, {0x01A2, 0x01A3, 0x01A2}, /* 01A2 */
2095 {0x01A4, 0x01A5, 0x01A4}, {0x01A4, 0x01A5, 0x01A4}, /* 01A4 */
2096 {0x01A6, 0x0280, 0x01A6}, {0x01A7, 0x01A8, 0x01A7}, /* 01A6 */
2097 {0x01A7, 0x01A8, 0x01A7}, {0x01A9, 0x0283, 0x01A9}, /* 01A8 */
2098 {0x01AA, 0x01AA, 0x01AA}, {0x01AB, 0x01AB, 0x01AB}, /* 01AA */
2099 {0x01AC, 0x01AD, 0x01AC}, {0x01AC, 0x01AD, 0x01AC}, /* 01AC */
2100 {0x01AE, 0x0288, 0x01AE}, {0x01AF, 0x01B0, 0x0055}, /* 01AE */
2101 {0x01AF, 0x01B0, 0x0055}, {0x01B1, 0x028A, 0x01B1}, /* 01B0 */
2102 {0x01B2, 0x028B, 0x01B2}, {0x01B3, 0x01B4, 0x01B3}, /* 01B2 */
2103 {0x01B3, 0x01B4, 0x01B3}, {0x01B5, 0x01B6, 0x01B5}, /* 01B4 */
2104 {0x01B5, 0x01B6, 0x01B5}, {0x01B7, 0x0292, 0x01B7}, /* 01B6 */
2105 {0x01B8, 0x01B9, 0x01B8}, {0x01B8, 0x01B9, 0x01B8}, /* 01B8 */
2106 {0x01BA, 0x01BA, 0x01BA}, {0x01BB, 0x01BB, 0x01BB}, /* 01BA */
2107 {0x01BC, 0x01BD, 0x01BC}, {0x01BC, 0x01BD, 0x01BC}, /* 01BC */
2108 {0x01BE, 0x01BE, 0x01BE}, {0x01F7, 0x01BF, 0x01F7}, /* 01BE */
2109 {0x01C0, 0x01C0, 0x01C0}, {0x01C1, 0x01C1, 0x01C1}, /* 01C0 */
2110 {0x01C2, 0x01C2, 0x01C2}, {0x01C3, 0x01C3, 0x01C3}, /* 01C2 */
2111 {0x01C4, 0x01C6, 0x01C4}, {0x01C4, 0x01C6, 0x01C4}, /* 01C4 */
2112 {0x01C4, 0x01C6, 0x01C4}, {0x01C7, 0x01C9, 0x01C7}, /* 01C6 */
2113 {0x01C7, 0x01C9, 0x01C7}, {0x01C7, 0x01C9, 0x01C7}, /* 01C8 */
2114 {0x01CA, 0x01CC, 0x01CA}, {0x01CA, 0x01CC, 0x01CA}, /* 01CA */
2115 {0x01CA, 0x01CC, 0x01CA}, {0x01CD, 0x01CE, 0x0041}, /* 01CC */
2116 {0x01CD, 0x01CE, 0x0041}, {0x01CF, 0x01D0, 0x0049}, /* 01CE */
2117 {0x01CF, 0x01D0, 0x0049}, {0x01D1, 0x01D2, 0x004F}, /* 01D0 */
2118 {0x01D1, 0x01D2, 0x004F}, {0x01D3, 0x01D4, 0x0055}, /* 01D2 */
2119 {0x01D3, 0x01D4, 0x0055}, {0x01D5, 0x01D6, 0x0055}, /* 01D4 */
2120 {0x01D5, 0x01D6, 0x0055}, {0x01D7, 0x01D8, 0x0055}, /* 01D6 */
2121 {0x01D7, 0x01D8, 0x0055}, {0x01D9, 0x01DA, 0x0055}, /* 01D8 */
2122 {0x01D9, 0x01DA, 0x0055}, {0x01DB, 0x01DC, 0x0055}, /* 01DA */
2123 {0x01DB, 0x01DC, 0x0055}, {0x018E, 0x01DD, 0x018E}, /* 01DC */
2124 {0x01DE, 0x01DF, 0x0041}, {0x01DE, 0x01DF, 0x0041}, /* 01DE */
2125 {0x01E0, 0x01E1, 0x0041}, {0x01E0, 0x01E1, 0x0041}, /* 01E0 */
2126 {0x01E2, 0x01E3, 0x00C6}, {0x01E2, 0x01E3, 0x00C6}, /* 01E2 */
2127 {0x01E4, 0x01E5, 0x01E4}, {0x01E4, 0x01E5, 0x01E4}, /* 01E4 */
2128 {0x01E6, 0x01E7, 0x0047}, {0x01E6, 0x01E7, 0x0047}, /* 01E6 */
2129 {0x01E8, 0x01E9, 0x004B}, {0x01E8, 0x01E9, 0x004B}, /* 01E8 */
2130 {0x01EA, 0x01EB, 0x004F}, {0x01EA, 0x01EB, 0x004F}, /* 01EA */
2131 {0x01EC, 0x01ED, 0x004F}, {0x01EC, 0x01ED, 0x004F}, /* 01EC */
2132 {0x01EE, 0x01EF, 0x01B7}, {0x01EE, 0x01EF, 0x01B7}, /* 01EE */
2133 {0x01F0, 0x01F0, 0x004A}, {0x01F1, 0x01F3, 0x01F1}, /* 01F0 */
2134 {0x01F1, 0x01F3, 0x01F1}, {0x01F1, 0x01F3, 0x01F1}, /* 01F2 */
2135 {0x01F4, 0x01F5, 0x0047}, {0x01F4, 0x01F5, 0x0047}, /* 01F4 */
2136 {0x01F6, 0x0195, 0x01F6}, {0x01F7, 0x01BF, 0x01F7}, /* 01F6 */
2137 {0x01F8, 0x01F9, 0x004E}, {0x01F8, 0x01F9, 0x004E}, /* 01F8 */
2138 {0x01FA, 0x01FB, 0x0041}, {0x01FA, 0x01FB, 0x0041}, /* 01FA */
2139 {0x01FC, 0x01FD, 0x00C6}, {0x01FC, 0x01FD, 0x00C6}, /* 01FC */
2140 {0x01FE, 0x01FF, 0x00D8}, {0x01FE, 0x01FF, 0x00D8} /* 01FE */
2141 };
2142
2143 static const MY_UNICASE_CHARACTER u520p02[] = {
2144 {0x0200, 0x0201, 0x0041}, {0x0200, 0x0201, 0x0041}, /* 0200 */
2145 {0x0202, 0x0203, 0x0041}, {0x0202, 0x0203, 0x0041}, /* 0202 */
2146 {0x0204, 0x0205, 0x0045}, {0x0204, 0x0205, 0x0045}, /* 0204 */
2147 {0x0206, 0x0207, 0x0045}, {0x0206, 0x0207, 0x0045}, /* 0206 */
2148 {0x0208, 0x0209, 0x0049}, {0x0208, 0x0209, 0x0049}, /* 0208 */
2149 {0x020A, 0x020B, 0x0049}, {0x020A, 0x020B, 0x0049}, /* 020A */
2150 {0x020C, 0x020D, 0x004F}, {0x020C, 0x020D, 0x004F}, /* 020C */
2151 {0x020E, 0x020F, 0x004F}, {0x020E, 0x020F, 0x004F}, /* 020E */
2152 {0x0210, 0x0211, 0x0052}, {0x0210, 0x0211, 0x0052}, /* 0210 */
2153 {0x0212, 0x0213, 0x0052}, {0x0212, 0x0213, 0x0052}, /* 0212 */
2154 {0x0214, 0x0215, 0x0055}, {0x0214, 0x0215, 0x0055}, /* 0214 */
2155 {0x0216, 0x0217, 0x0055}, {0x0216, 0x0217, 0x0055}, /* 0216 */
2156 {0x0218, 0x0219, 0x0053}, {0x0218, 0x0219, 0x0053}, /* 0218 */
2157 {0x021A, 0x021B, 0x0054}, {0x021A, 0x021B, 0x0054}, /* 021A */
2158 {0x021C, 0x021D, 0x021C}, {0x021C, 0x021D, 0x021C}, /* 021C */
2159 {0x021E, 0x021F, 0x0048}, {0x021E, 0x021F, 0x0048}, /* 021E */
2160 {0x0220, 0x019E, 0x0220}, {0x0221, 0x0221, 0x0221}, /* 0220 */
2161 {0x0222, 0x0223, 0x0222}, {0x0222, 0x0223, 0x0222}, /* 0222 */
2162 {0x0224, 0x0225, 0x0224}, {0x0224, 0x0225, 0x0224}, /* 0224 */
2163 {0x0226, 0x0227, 0x0041}, {0x0226, 0x0227, 0x0041}, /* 0226 */
2164 {0x0228, 0x0229, 0x0045}, {0x0228, 0x0229, 0x0045}, /* 0228 */
2165 {0x022A, 0x022B, 0x004F}, {0x022A, 0x022B, 0x004F}, /* 022A */
2166 {0x022C, 0x022D, 0x004F}, {0x022C, 0x022D, 0x004F}, /* 022C */
2167 {0x022E, 0x022F, 0x004F}, {0x022E, 0x022F, 0x004F}, /* 022E */
2168 {0x0230, 0x0231, 0x004F}, {0x0230, 0x0231, 0x004F}, /* 0230 */
2169 {0x0232, 0x0233, 0x0059}, {0x0232, 0x0233, 0x0059}, /* 0232 */
2170 {0x0234, 0x0234, 0x0234}, {0x0235, 0x0235, 0x0235}, /* 0234 */
2171 {0x0236, 0x0236, 0x0236}, {0x0237, 0x0237, 0x0237}, /* 0236 */
2172 {0x0238, 0x0238, 0x0238}, {0x0239, 0x0239, 0x0239}, /* 0238 */
2173 {0x023A, 0x2C65, 0x023A}, {0x023B, 0x023C, 0x023B}, /* 023A */
2174 {0x023B, 0x023C, 0x023B}, {0x023D, 0x019A, 0x023D}, /* 023C */
2175 {0x023E, 0x2C66, 0x023E}, {0x2C7E, 0x023F, 0x2C7E}, /* 023E */
2176 {0x2C7F, 0x0240, 0x2C7F}, {0x0241, 0x0242, 0x0241}, /* 0240 */
2177 {0x0241, 0x0242, 0x0241}, {0x0243, 0x0180, 0x0243}, /* 0242 */
2178 {0x0244, 0x0289, 0x0244}, {0x0245, 0x028C, 0x0245}, /* 0244 */
2179 {0x0246, 0x0247, 0x0246}, {0x0246, 0x0247, 0x0246}, /* 0246 */
2180 {0x0248, 0x0249, 0x0248}, {0x0248, 0x0249, 0x0248}, /* 0248 */
2181 {0x024A, 0x024B, 0x024A}, {0x024A, 0x024B, 0x024A}, /* 024A */
2182 {0x024C, 0x024D, 0x024C}, {0x024C, 0x024D, 0x024C}, /* 024C */
2183 {0x024E, 0x024F, 0x024E}, {0x024E, 0x024F, 0x024E}, /* 024E */
2184 {0x2C6F, 0x0250, 0x2C6F}, {0x2C6D, 0x0251, 0x2C6D}, /* 0250 */
2185 {0x2C70, 0x0252, 0x2C70}, {0x0181, 0x0253, 0x0181}, /* 0252 */
2186 {0x0186, 0x0254, 0x0186}, {0x0255, 0x0255, 0x0255}, /* 0254 */
2187 {0x0189, 0x0256, 0x0189}, {0x018A, 0x0257, 0x018A}, /* 0256 */
2188 {0x0258, 0x0258, 0x0258}, {0x018F, 0x0259, 0x018F}, /* 0258 */
2189 {0x025A, 0x025A, 0x025A}, {0x0190, 0x025B, 0x0190}, /* 025A */
2190 {0x025C, 0x025C, 0x025C}, {0x025D, 0x025D, 0x025D}, /* 025C */
2191 {0x025E, 0x025E, 0x025E}, {0x025F, 0x025F, 0x025F}, /* 025E */
2192 {0x0193, 0x0260, 0x0193}, {0x0261, 0x0261, 0x0261}, /* 0260 */
2193 {0x0262, 0x0262, 0x0262}, {0x0194, 0x0263, 0x0194}, /* 0262 */
2194 {0x0264, 0x0264, 0x0264}, {0x0265, 0x0265, 0x0265}, /* 0264 */
2195 {0x0266, 0x0266, 0x0266}, {0x0267, 0x0267, 0x0267}, /* 0266 */
2196 {0x0197, 0x0268, 0x0197}, {0x0196, 0x0269, 0x0196}, /* 0268 */
2197 {0x026A, 0x026A, 0x026A}, {0x2C62, 0x026B, 0x2C62}, /* 026A */
2198 {0x026C, 0x026C, 0x026C}, {0x026D, 0x026D, 0x026D}, /* 026C */
2199 {0x026E, 0x026E, 0x026E}, {0x019C, 0x026F, 0x019C}, /* 026E */
2200 {0x0270, 0x0270, 0x0270}, {0x2C6E, 0x0271, 0x2C6E}, /* 0270 */
2201 {0x019D, 0x0272, 0x019D}, {0x0273, 0x0273, 0x0273}, /* 0272 */
2202 {0x0274, 0x0274, 0x0274}, {0x019F, 0x0275, 0x019F}, /* 0274 */
2203 {0x0276, 0x0276, 0x0276}, {0x0277, 0x0277, 0x0277}, /* 0276 */
2204 {0x0278, 0x0278, 0x0278}, {0x0279, 0x0279, 0x0279}, /* 0278 */
2205 {0x027A, 0x027A, 0x027A}, {0x027B, 0x027B, 0x027B}, /* 027A */
2206 {0x027C, 0x027C, 0x027C}, {0x2C64, 0x027D, 0x2C64}, /* 027C */
2207 {0x027E, 0x027E, 0x027E}, {0x027F, 0x027F, 0x027F}, /* 027E */
2208 {0x01A6, 0x0280, 0x01A6}, {0x0281, 0x0281, 0x0281}, /* 0280 */
2209 {0x0282, 0x0282, 0x0282}, {0x01A9, 0x0283, 0x01A9}, /* 0282 */
2210 {0x0284, 0x0284, 0x0284}, {0x0285, 0x0285, 0x0285}, /* 0284 */
2211 {0x0286, 0x0286, 0x0286}, {0x0287, 0x0287, 0x0287}, /* 0286 */
2212 {0x01AE, 0x0288, 0x01AE}, {0x0244, 0x0289, 0x0244}, /* 0288 */
2213 {0x01B1, 0x028A, 0x01B1}, {0x01B2, 0x028B, 0x01B2}, /* 028A */
2214 {0x0245, 0x028C, 0x0245}, {0x028D, 0x028D, 0x028D}, /* 028C */
2215 {0x028E, 0x028E, 0x028E}, {0x028F, 0x028F, 0x028F}, /* 028E */
2216 {0x0290, 0x0290, 0x0290}, {0x0291, 0x0291, 0x0291}, /* 0290 */
2217 {0x01B7, 0x0292, 0x01B7}, {0x0293, 0x0293, 0x0293}, /* 0292 */
2218 {0x0294, 0x0294, 0x0294}, {0x0295, 0x0295, 0x0295}, /* 0294 */
2219 {0x0296, 0x0296, 0x0296}, {0x0297, 0x0297, 0x0297}, /* 0296 */
2220 {0x0298, 0x0298, 0x0298}, {0x0299, 0x0299, 0x0299}, /* 0298 */
2221 {0x029A, 0x029A, 0x029A}, {0x029B, 0x029B, 0x029B}, /* 029A */
2222 {0x029C, 0x029C, 0x029C}, {0x029D, 0x029D, 0x029D}, /* 029C */
2223 {0x029E, 0x029E, 0x029E}, {0x029F, 0x029F, 0x029F}, /* 029E */
2224 {0x02A0, 0x02A0, 0x02A0}, {0x02A1, 0x02A1, 0x02A1}, /* 02A0 */
2225 {0x02A2, 0x02A2, 0x02A2}, {0x02A3, 0x02A3, 0x02A3}, /* 02A2 */
2226 {0x02A4, 0x02A4, 0x02A4}, {0x02A5, 0x02A5, 0x02A5}, /* 02A4 */
2227 {0x02A6, 0x02A6, 0x02A6}, {0x02A7, 0x02A7, 0x02A7}, /* 02A6 */
2228 {0x02A8, 0x02A8, 0x02A8}, {0x02A9, 0x02A9, 0x02A9}, /* 02A8 */
2229 {0x02AA, 0x02AA, 0x02AA}, {0x02AB, 0x02AB, 0x02AB}, /* 02AA */
2230 {0x02AC, 0x02AC, 0x02AC}, {0x02AD, 0x02AD, 0x02AD}, /* 02AC */
2231 {0x02AE, 0x02AE, 0x02AE}, {0x02AF, 0x02AF, 0x02AF}, /* 02AE */
2232 {0x02B0, 0x02B0, 0x02B0}, {0x02B1, 0x02B1, 0x02B1}, /* 02B0 */
2233 {0x02B2, 0x02B2, 0x02B2}, {0x02B3, 0x02B3, 0x02B3}, /* 02B2 */
2234 {0x02B4, 0x02B4, 0x02B4}, {0x02B5, 0x02B5, 0x02B5}, /* 02B4 */
2235 {0x02B6, 0x02B6, 0x02B6}, {0x02B7, 0x02B7, 0x02B7}, /* 02B6 */
2236 {0x02B8, 0x02B8, 0x02B8}, {0x02B9, 0x02B9, 0x02B9}, /* 02B8 */
2237 {0x02BA, 0x02BA, 0x02BA}, {0x02BB, 0x02BB, 0x02BB}, /* 02BA */
2238 {0x02BC, 0x02BC, 0x02BC}, {0x02BD, 0x02BD, 0x02BD}, /* 02BC */
2239 {0x02BE, 0x02BE, 0x02BE}, {0x02BF, 0x02BF, 0x02BF}, /* 02BE */
2240 {0x02C0, 0x02C0, 0x02C0}, {0x02C1, 0x02C1, 0x02C1}, /* 02C0 */
2241 {0x02C2, 0x02C2, 0x02C2}, {0x02C3, 0x02C3, 0x02C3}, /* 02C2 */
2242 {0x02C4, 0x02C4, 0x02C4}, {0x02C5, 0x02C5, 0x02C5}, /* 02C4 */
2243 {0x02C6, 0x02C6, 0x02C6}, {0x02C7, 0x02C7, 0x02C7}, /* 02C6 */
2244 {0x02C8, 0x02C8, 0x02C8}, {0x02C9, 0x02C9, 0x02C9}, /* 02C8 */
2245 {0x02CA, 0x02CA, 0x02CA}, {0x02CB, 0x02CB, 0x02CB}, /* 02CA */
2246 {0x02CC, 0x02CC, 0x02CC}, {0x02CD, 0x02CD, 0x02CD}, /* 02CC */
2247 {0x02CE, 0x02CE, 0x02CE}, {0x02CF, 0x02CF, 0x02CF}, /* 02CE */
2248 {0x02D0, 0x02D0, 0x02D0}, {0x02D1, 0x02D1, 0x02D1}, /* 02D0 */
2249 {0x02D2, 0x02D2, 0x02D2}, {0x02D3, 0x02D3, 0x02D3}, /* 02D2 */
2250 {0x02D4, 0x02D4, 0x02D4}, {0x02D5, 0x02D5, 0x02D5}, /* 02D4 */
2251 {0x02D6, 0x02D6, 0x02D6}, {0x02D7, 0x02D7, 0x02D7}, /* 02D6 */
2252 {0x02D8, 0x02D8, 0x02D8}, {0x02D9, 0x02D9, 0x02D9}, /* 02D8 */
2253 {0x02DA, 0x02DA, 0x02DA}, {0x02DB, 0x02DB, 0x02DB}, /* 02DA */
2254 {0x02DC, 0x02DC, 0x02DC}, {0x02DD, 0x02DD, 0x02DD}, /* 02DC */
2255 {0x02DE, 0x02DE, 0x02DE}, {0x02DF, 0x02DF, 0x02DF}, /* 02DE */
2256 {0x02E0, 0x02E0, 0x02E0}, {0x02E1, 0x02E1, 0x02E1}, /* 02E0 */
2257 {0x02E2, 0x02E2, 0x02E2}, {0x02E3, 0x02E3, 0x02E3}, /* 02E2 */
2258 {0x02E4, 0x02E4, 0x02E4}, {0x02E5, 0x02E5, 0x02E5}, /* 02E4 */
2259 {0x02E6, 0x02E6, 0x02E6}, {0x02E7, 0x02E7, 0x02E7}, /* 02E6 */
2260 {0x02E8, 0x02E8, 0x02E8}, {0x02E9, 0x02E9, 0x02E9}, /* 02E8 */
2261 {0x02EA, 0x02EA, 0x02EA}, {0x02EB, 0x02EB, 0x02EB}, /* 02EA */
2262 {0x02EC, 0x02EC, 0x02EC}, {0x02ED, 0x02ED, 0x02ED}, /* 02EC */
2263 {0x02EE, 0x02EE, 0x02EE}, {0x02EF, 0x02EF, 0x02EF}, /* 02EE */
2264 {0x02F0, 0x02F0, 0x02F0}, {0x02F1, 0x02F1, 0x02F1}, /* 02F0 */
2265 {0x02F2, 0x02F2, 0x02F2}, {0x02F3, 0x02F3, 0x02F3}, /* 02F2 */
2266 {0x02F4, 0x02F4, 0x02F4}, {0x02F5, 0x02F5, 0x02F5}, /* 02F4 */
2267 {0x02F6, 0x02F6, 0x02F6}, {0x02F7, 0x02F7, 0x02F7}, /* 02F6 */
2268 {0x02F8, 0x02F8, 0x02F8}, {0x02F9, 0x02F9, 0x02F9}, /* 02F8 */
2269 {0x02FA, 0x02FA, 0x02FA}, {0x02FB, 0x02FB, 0x02FB}, /* 02FA */
2270 {0x02FC, 0x02FC, 0x02FC}, {0x02FD, 0x02FD, 0x02FD}, /* 02FC */
2271 {0x02FE, 0x02FE, 0x02FE}, {0x02FF, 0x02FF, 0x02FF} /* 02FE */
2272 };
2273
2274 static const MY_UNICASE_CHARACTER u520p03[] = {
2275 {0x0300, 0x0300, 0x0300}, {0x0301, 0x0301, 0x0301}, /* 0300 */
2276 {0x0302, 0x0302, 0x0302}, {0x0303, 0x0303, 0x0303}, /* 0302 */
2277 {0x0304, 0x0304, 0x0304}, {0x0305, 0x0305, 0x0305}, /* 0304 */
2278 {0x0306, 0x0306, 0x0306}, {0x0307, 0x0307, 0x0307}, /* 0306 */
2279 {0x0308, 0x0308, 0x0308}, {0x0309, 0x0309, 0x0309}, /* 0308 */
2280 {0x030A, 0x030A, 0x030A}, {0x030B, 0x030B, 0x030B}, /* 030A */
2281 {0x030C, 0x030C, 0x030C}, {0x030D, 0x030D, 0x030D}, /* 030C */
2282 {0x030E, 0x030E, 0x030E}, {0x030F, 0x030F, 0x030F}, /* 030E */
2283 {0x0310, 0x0310, 0x0310}, {0x0311, 0x0311, 0x0311}, /* 0310 */
2284 {0x0312, 0x0312, 0x0312}, {0x0313, 0x0313, 0x0313}, /* 0312 */
2285 {0x0314, 0x0314, 0x0314}, {0x0315, 0x0315, 0x0315}, /* 0314 */
2286 {0x0316, 0x0316, 0x0316}, {0x0317, 0x0317, 0x0317}, /* 0316 */
2287 {0x0318, 0x0318, 0x0318}, {0x0319, 0x0319, 0x0319}, /* 0318 */
2288 {0x031A, 0x031A, 0x031A}, {0x031B, 0x031B, 0x031B}, /* 031A */
2289 {0x031C, 0x031C, 0x031C}, {0x031D, 0x031D, 0x031D}, /* 031C */
2290 {0x031E, 0x031E, 0x031E}, {0x031F, 0x031F, 0x031F}, /* 031E */
2291 {0x0320, 0x0320, 0x0320}, {0x0321, 0x0321, 0x0321}, /* 0320 */
2292 {0x0322, 0x0322, 0x0322}, {0x0323, 0x0323, 0x0323}, /* 0322 */
2293 {0x0324, 0x0324, 0x0324}, {0x0325, 0x0325, 0x0325}, /* 0324 */
2294 {0x0326, 0x0326, 0x0326}, {0x0327, 0x0327, 0x0327}, /* 0326 */
2295 {0x0328, 0x0328, 0x0328}, {0x0329, 0x0329, 0x0329}, /* 0328 */
2296 {0x032A, 0x032A, 0x032A}, {0x032B, 0x032B, 0x032B}, /* 032A */
2297 {0x032C, 0x032C, 0x032C}, {0x032D, 0x032D, 0x032D}, /* 032C */
2298 {0x032E, 0x032E, 0x032E}, {0x032F, 0x032F, 0x032F}, /* 032E */
2299 {0x0330, 0x0330, 0x0330}, {0x0331, 0x0331, 0x0331}, /* 0330 */
2300 {0x0332, 0x0332, 0x0332}, {0x0333, 0x0333, 0x0333}, /* 0332 */
2301 {0x0334, 0x0334, 0x0334}, {0x0335, 0x0335, 0x0335}, /* 0334 */
2302 {0x0336, 0x0336, 0x0336}, {0x0337, 0x0337, 0x0337}, /* 0336 */
2303 {0x0338, 0x0338, 0x0338}, {0x0339, 0x0339, 0x0339}, /* 0338 */
2304 {0x033A, 0x033A, 0x033A}, {0x033B, 0x033B, 0x033B}, /* 033A */
2305 {0x033C, 0x033C, 0x033C}, {0x033D, 0x033D, 0x033D}, /* 033C */
2306 {0x033E, 0x033E, 0x033E}, {0x033F, 0x033F, 0x033F}, /* 033E */
2307 {0x0340, 0x0340, 0x0340}, {0x0341, 0x0341, 0x0341}, /* 0340 */
2308 {0x0342, 0x0342, 0x0342}, {0x0343, 0x0343, 0x0343}, /* 0342 */
2309 {0x0344, 0x0344, 0x0344}, {0x0399, 0x0345, 0x0399}, /* 0344 */
2310 {0x0346, 0x0346, 0x0346}, {0x0347, 0x0347, 0x0347}, /* 0346 */
2311 {0x0348, 0x0348, 0x0348}, {0x0349, 0x0349, 0x0349}, /* 0348 */
2312 {0x034A, 0x034A, 0x034A}, {0x034B, 0x034B, 0x034B}, /* 034A */
2313 {0x034C, 0x034C, 0x034C}, {0x034D, 0x034D, 0x034D}, /* 034C */
2314 {0x034E, 0x034E, 0x034E}, {0x034F, 0x034F, 0x034F}, /* 034E */
2315 {0x0350, 0x0350, 0x0350}, {0x0351, 0x0351, 0x0351}, /* 0350 */
2316 {0x0352, 0x0352, 0x0352}, {0x0353, 0x0353, 0x0353}, /* 0352 */
2317 {0x0354, 0x0354, 0x0354}, {0x0355, 0x0355, 0x0355}, /* 0354 */
2318 {0x0356, 0x0356, 0x0356}, {0x0357, 0x0357, 0x0357}, /* 0356 */
2319 {0x0358, 0x0358, 0x0358}, {0x0359, 0x0359, 0x0359}, /* 0358 */
2320 {0x035A, 0x035A, 0x035A}, {0x035B, 0x035B, 0x035B}, /* 035A */
2321 {0x035C, 0x035C, 0x035C}, {0x035D, 0x035D, 0x035D}, /* 035C */
2322 {0x035E, 0x035E, 0x035E}, {0x035F, 0x035F, 0x035F}, /* 035E */
2323 {0x0360, 0x0360, 0x0360}, {0x0361, 0x0361, 0x0361}, /* 0360 */
2324 {0x0362, 0x0362, 0x0362}, {0x0363, 0x0363, 0x0363}, /* 0362 */
2325 {0x0364, 0x0364, 0x0364}, {0x0365, 0x0365, 0x0365}, /* 0364 */
2326 {0x0366, 0x0366, 0x0366}, {0x0367, 0x0367, 0x0367}, /* 0366 */
2327 {0x0368, 0x0368, 0x0368}, {0x0369, 0x0369, 0x0369}, /* 0368 */
2328 {0x036A, 0x036A, 0x036A}, {0x036B, 0x036B, 0x036B}, /* 036A */
2329 {0x036C, 0x036C, 0x036C}, {0x036D, 0x036D, 0x036D}, /* 036C */
2330 {0x036E, 0x036E, 0x036E}, {0x036F, 0x036F, 0x036F}, /* 036E */
2331 {0x0370, 0x0371, 0x0370}, {0x0370, 0x0371, 0x0370}, /* 0370 */
2332 {0x0372, 0x0373, 0x0372}, {0x0372, 0x0373, 0x0372}, /* 0372 */
2333 {0x0374, 0x0374, 0x0374}, {0x0375, 0x0375, 0x0375}, /* 0374 */
2334 {0x0376, 0x0377, 0x0376}, {0x0376, 0x0377, 0x0376}, /* 0376 */
2335 {0x0378, 0x0378, 0x0378}, {0x0379, 0x0379, 0x0379}, /* 0378 */
2336 {0x037A, 0x037A, 0x037A}, {0x03FD, 0x037B, 0x03FD}, /* 037A */
2337 {0x03FE, 0x037C, 0x03FE}, {0x03FF, 0x037D, 0x03FF}, /* 037C */
2338 {0x037E, 0x037E, 0x037E}, {0x037F, 0x037F, 0x037F}, /* 037E */
2339 {0x0380, 0x0380, 0x0380}, {0x0381, 0x0381, 0x0381}, /* 0380 */
2340 {0x0382, 0x0382, 0x0382}, {0x0383, 0x0383, 0x0383}, /* 0382 */
2341 {0x0384, 0x0384, 0x0384}, {0x0385, 0x0385, 0x0385}, /* 0384 */
2342 {0x0386, 0x03AC, 0x0391}, {0x0387, 0x0387, 0x0387}, /* 0386 */
2343 {0x0388, 0x03AD, 0x0395}, {0x0389, 0x03AE, 0x0397}, /* 0388 */
2344 {0x038A, 0x03AF, 0x0399}, {0x038B, 0x038B, 0x038B}, /* 038A */
2345 {0x038C, 0x03CC, 0x039F}, {0x038D, 0x038D, 0x038D}, /* 038C */
2346 {0x038E, 0x03CD, 0x03A5}, {0x038F, 0x03CE, 0x03A9}, /* 038E */
2347 {0x0390, 0x0390, 0x0399}, {0x0391, 0x03B1, 0x0391}, /* 0390 */
2348 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393}, /* 0392 */
2349 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395}, /* 0394 */
2350 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397}, /* 0396 */
2351 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399}, /* 0398 */
2352 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B}, /* 039A */
2353 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D}, /* 039C */
2354 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F}, /* 039E */
2355 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1}, /* 03A0 */
2356 {0x03A2, 0x03A2, 0x03A2}, {0x03A3, 0x03C3, 0x03A3}, /* 03A2 */
2357 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5}, /* 03A4 */
2358 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7}, /* 03A6 */
2359 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9}, /* 03A8 */
2360 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5}, /* 03AA */
2361 {0x0386, 0x03AC, 0x0391}, {0x0388, 0x03AD, 0x0395}, /* 03AC */
2362 {0x0389, 0x03AE, 0x0397}, {0x038A, 0x03AF, 0x0399}, /* 03AE */
2363 {0x03B0, 0x03B0, 0x03A5}, {0x0391, 0x03B1, 0x0391}, /* 03B0 */
2364 {0x0392, 0x03B2, 0x0392}, {0x0393, 0x03B3, 0x0393}, /* 03B2 */
2365 {0x0394, 0x03B4, 0x0394}, {0x0395, 0x03B5, 0x0395}, /* 03B4 */
2366 {0x0396, 0x03B6, 0x0396}, {0x0397, 0x03B7, 0x0397}, /* 03B6 */
2367 {0x0398, 0x03B8, 0x0398}, {0x0399, 0x03B9, 0x0399}, /* 03B8 */
2368 {0x039A, 0x03BA, 0x039A}, {0x039B, 0x03BB, 0x039B}, /* 03BA */
2369 {0x039C, 0x03BC, 0x039C}, {0x039D, 0x03BD, 0x039D}, /* 03BC */
2370 {0x039E, 0x03BE, 0x039E}, {0x039F, 0x03BF, 0x039F}, /* 03BE */
2371 {0x03A0, 0x03C0, 0x03A0}, {0x03A1, 0x03C1, 0x03A1}, /* 03C0 */
2372 {0x03A3, 0x03C2, 0x03A3}, {0x03A3, 0x03C3, 0x03A3}, /* 03C2 */
2373 {0x03A4, 0x03C4, 0x03A4}, {0x03A5, 0x03C5, 0x03A5}, /* 03C4 */
2374 {0x03A6, 0x03C6, 0x03A6}, {0x03A7, 0x03C7, 0x03A7}, /* 03C6 */
2375 {0x03A8, 0x03C8, 0x03A8}, {0x03A9, 0x03C9, 0x03A9}, /* 03C8 */
2376 {0x03AA, 0x03CA, 0x0399}, {0x03AB, 0x03CB, 0x03A5}, /* 03CA */
2377 {0x038C, 0x03CC, 0x039F}, {0x038E, 0x03CD, 0x03A5}, /* 03CC */
2378 {0x038F, 0x03CE, 0x03A9}, {0x03CF, 0x03D7, 0x03CF}, /* 03CE */
2379 {0x0392, 0x03D0, 0x0392}, {0x0398, 0x03D1, 0x0398}, /* 03D0 */
2380 {0x03D2, 0x03D2, 0x03D2}, {0x03D3, 0x03D3, 0x03D2}, /* 03D2 */
2381 {0x03D4, 0x03D4, 0x03D2}, {0x03A6, 0x03D5, 0x03A6}, /* 03D4 */
2382 {0x03A0, 0x03D6, 0x03A0}, {0x03CF, 0x03D7, 0x03CF}, /* 03D6 */
2383 {0x03D8, 0x03D9, 0x03D8}, {0x03D8, 0x03D9, 0x03D8}, /* 03D8 */
2384 {0x03DA, 0x03DB, 0x03DA}, {0x03DA, 0x03DB, 0x03DA}, /* 03DA */
2385 {0x03DC, 0x03DD, 0x03DC}, {0x03DC, 0x03DD, 0x03DC}, /* 03DC */
2386 {0x03DE, 0x03DF, 0x03DE}, {0x03DE, 0x03DF, 0x03DE}, /* 03DE */
2387 {0x03E0, 0x03E1, 0x03E0}, {0x03E0, 0x03E1, 0x03E0}, /* 03E0 */
2388 {0x03E2, 0x03E3, 0x03E2}, {0x03E2, 0x03E3, 0x03E2}, /* 03E2 */
2389 {0x03E4, 0x03E5, 0x03E4}, {0x03E4, 0x03E5, 0x03E4}, /* 03E4 */
2390 {0x03E6, 0x03E7, 0x03E6}, {0x03E6, 0x03E7, 0x03E6}, /* 03E6 */
2391 {0x03E8, 0x03E9, 0x03E8}, {0x03E8, 0x03E9, 0x03E8}, /* 03E8 */
2392 {0x03EA, 0x03EB, 0x03EA}, {0x03EA, 0x03EB, 0x03EA}, /* 03EA */
2393 {0x03EC, 0x03ED, 0x03EC}, {0x03EC, 0x03ED, 0x03EC}, /* 03EC */
2394 {0x03EE, 0x03EF, 0x03EE}, {0x03EE, 0x03EF, 0x03EE}, /* 03EE */
2395 {0x039A, 0x03F0, 0x039A}, {0x03A1, 0x03F1, 0x03A1}, /* 03F0 */
2396 {0x03F9, 0x03F2, 0x03F9}, {0x03F3, 0x03F3, 0x03F3}, /* 03F2 */
2397 {0x03F4, 0x03B8, 0x03F4}, {0x0395, 0x03F5, 0x0395}, /* 03F4 */
2398 {0x03F6, 0x03F6, 0x03F6}, {0x03F7, 0x03F8, 0x03F7}, /* 03F6 */
2399 {0x03F7, 0x03F8, 0x03F7}, {0x03F9, 0x03F2, 0x03F9}, /* 03F8 */
2400 {0x03FA, 0x03FB, 0x03FA}, {0x03FA, 0x03FB, 0x03FA}, /* 03FA */
2401 {0x03FC, 0x03FC, 0x03FC}, {0x03FD, 0x037B, 0x03FD}, /* 03FC */
2402 {0x03FE, 0x037C, 0x03FE}, {0x03FF, 0x037D, 0x03FF} /* 03FE */
2403 };
2404
2405 static const MY_UNICASE_CHARACTER u520p04[] = {
2406 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415}, /* 0400 */
2407 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413}, /* 0402 */
2408 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405}, /* 0404 */
2409 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406}, /* 0406 */
2410 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409}, /* 0408 */
2411 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B}, /* 040A */
2412 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418}, /* 040C */
2413 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F}, /* 040E */
2414 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411}, /* 0410 */
2415 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413}, /* 0412 */
2416 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415}, /* 0414 */
2417 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417}, /* 0416 */
2418 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419}, /* 0418 */
2419 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B}, /* 041A */
2420 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D}, /* 041C */
2421 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F}, /* 041E */
2422 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421}, /* 0420 */
2423 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423}, /* 0422 */
2424 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425}, /* 0424 */
2425 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427}, /* 0426 */
2426 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429}, /* 0428 */
2427 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B}, /* 042A */
2428 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D}, /* 042C */
2429 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F}, /* 042E */
2430 {0x0410, 0x0430, 0x0410}, {0x0411, 0x0431, 0x0411}, /* 0430 */
2431 {0x0412, 0x0432, 0x0412}, {0x0413, 0x0433, 0x0413}, /* 0432 */
2432 {0x0414, 0x0434, 0x0414}, {0x0415, 0x0435, 0x0415}, /* 0434 */
2433 {0x0416, 0x0436, 0x0416}, {0x0417, 0x0437, 0x0417}, /* 0436 */
2434 {0x0418, 0x0438, 0x0418}, {0x0419, 0x0439, 0x0419}, /* 0438 */
2435 {0x041A, 0x043A, 0x041A}, {0x041B, 0x043B, 0x041B}, /* 043A */
2436 {0x041C, 0x043C, 0x041C}, {0x041D, 0x043D, 0x041D}, /* 043C */
2437 {0x041E, 0x043E, 0x041E}, {0x041F, 0x043F, 0x041F}, /* 043E */
2438 {0x0420, 0x0440, 0x0420}, {0x0421, 0x0441, 0x0421}, /* 0440 */
2439 {0x0422, 0x0442, 0x0422}, {0x0423, 0x0443, 0x0423}, /* 0442 */
2440 {0x0424, 0x0444, 0x0424}, {0x0425, 0x0445, 0x0425}, /* 0444 */
2441 {0x0426, 0x0446, 0x0426}, {0x0427, 0x0447, 0x0427}, /* 0446 */
2442 {0x0428, 0x0448, 0x0428}, {0x0429, 0x0449, 0x0429}, /* 0448 */
2443 {0x042A, 0x044A, 0x042A}, {0x042B, 0x044B, 0x042B}, /* 044A */
2444 {0x042C, 0x044C, 0x042C}, {0x042D, 0x044D, 0x042D}, /* 044C */
2445 {0x042E, 0x044E, 0x042E}, {0x042F, 0x044F, 0x042F}, /* 044E */
2446 {0x0400, 0x0450, 0x0415}, {0x0401, 0x0451, 0x0415}, /* 0450 */
2447 {0x0402, 0x0452, 0x0402}, {0x0403, 0x0453, 0x0413}, /* 0452 */
2448 {0x0404, 0x0454, 0x0404}, {0x0405, 0x0455, 0x0405}, /* 0454 */
2449 {0x0406, 0x0456, 0x0406}, {0x0407, 0x0457, 0x0406}, /* 0456 */
2450 {0x0408, 0x0458, 0x0408}, {0x0409, 0x0459, 0x0409}, /* 0458 */
2451 {0x040A, 0x045A, 0x040A}, {0x040B, 0x045B, 0x040B}, /* 045A */
2452 {0x040C, 0x045C, 0x041A}, {0x040D, 0x045D, 0x0418}, /* 045C */
2453 {0x040E, 0x045E, 0x0423}, {0x040F, 0x045F, 0x040F}, /* 045E */
2454 {0x0460, 0x0461, 0x0460}, {0x0460, 0x0461, 0x0460}, /* 0460 */
2455 {0x0462, 0x0463, 0x0462}, {0x0462, 0x0463, 0x0462}, /* 0462 */
2456 {0x0464, 0x0465, 0x0464}, {0x0464, 0x0465, 0x0464}, /* 0464 */
2457 {0x0466, 0x0467, 0x0466}, {0x0466, 0x0467, 0x0466}, /* 0466 */
2458 {0x0468, 0x0469, 0x0468}, {0x0468, 0x0469, 0x0468}, /* 0468 */
2459 {0x046A, 0x046B, 0x046A}, {0x046A, 0x046B, 0x046A}, /* 046A */
2460 {0x046C, 0x046D, 0x046C}, {0x046C, 0x046D, 0x046C}, /* 046C */
2461 {0x046E, 0x046F, 0x046E}, {0x046E, 0x046F, 0x046E}, /* 046E */
2462 {0x0470, 0x0471, 0x0470}, {0x0470, 0x0471, 0x0470}, /* 0470 */
2463 {0x0472, 0x0473, 0x0472}, {0x0472, 0x0473, 0x0472}, /* 0472 */
2464 {0x0474, 0x0475, 0x0474}, {0x0474, 0x0475, 0x0474}, /* 0474 */
2465 {0x0476, 0x0477, 0x0474}, {0x0476, 0x0477, 0x0474}, /* 0476 */
2466 {0x0478, 0x0479, 0x0478}, {0x0478, 0x0479, 0x0478}, /* 0478 */
2467 {0x047A, 0x047B, 0x047A}, {0x047A, 0x047B, 0x047A}, /* 047A */
2468 {0x047C, 0x047D, 0x047C}, {0x047C, 0x047D, 0x047C}, /* 047C */
2469 {0x047E, 0x047F, 0x047E}, {0x047E, 0x047F, 0x047E}, /* 047E */
2470 {0x0480, 0x0481, 0x0480}, {0x0480, 0x0481, 0x0480}, /* 0480 */
2471 {0x0482, 0x0482, 0x0482}, {0x0483, 0x0483, 0x0483}, /* 0482 */
2472 {0x0484, 0x0484, 0x0484}, {0x0485, 0x0485, 0x0485}, /* 0484 */
2473 {0x0486, 0x0486, 0x0486}, {0x0487, 0x0487, 0x0487}, /* 0486 */
2474 {0x0488, 0x0488, 0x0488}, {0x0489, 0x0489, 0x0489}, /* 0488 */
2475 {0x048A, 0x048B, 0x048A}, {0x048A, 0x048B, 0x048A}, /* 048A */
2476 {0x048C, 0x048D, 0x048C}, {0x048C, 0x048D, 0x048C}, /* 048C */
2477 {0x048E, 0x048F, 0x048E}, {0x048E, 0x048F, 0x048E}, /* 048E */
2478 {0x0490, 0x0491, 0x0490}, {0x0490, 0x0491, 0x0490}, /* 0490 */
2479 {0x0492, 0x0493, 0x0492}, {0x0492, 0x0493, 0x0492}, /* 0492 */
2480 {0x0494, 0x0495, 0x0494}, {0x0494, 0x0495, 0x0494}, /* 0494 */
2481 {0x0496, 0x0497, 0x0496}, {0x0496, 0x0497, 0x0496}, /* 0496 */
2482 {0x0498, 0x0499, 0x0498}, {0x0498, 0x0499, 0x0498}, /* 0498 */
2483 {0x049A, 0x049B, 0x049A}, {0x049A, 0x049B, 0x049A}, /* 049A */
2484 {0x049C, 0x049D, 0x049C}, {0x049C, 0x049D, 0x049C}, /* 049C */
2485 {0x049E, 0x049F, 0x049E}, {0x049E, 0x049F, 0x049E}, /* 049E */
2486 {0x04A0, 0x04A1, 0x04A0}, {0x04A0, 0x04A1, 0x04A0}, /* 04A0 */
2487 {0x04A2, 0x04A3, 0x04A2}, {0x04A2, 0x04A3, 0x04A2}, /* 04A2 */
2488 {0x04A4, 0x04A5, 0x04A4}, {0x04A4, 0x04A5, 0x04A4}, /* 04A4 */
2489 {0x04A6, 0x04A7, 0x04A6}, {0x04A6, 0x04A7, 0x04A6}, /* 04A6 */
2490 {0x04A8, 0x04A9, 0x04A8}, {0x04A8, 0x04A9, 0x04A8}, /* 04A8 */
2491 {0x04AA, 0x04AB, 0x04AA}, {0x04AA, 0x04AB, 0x04AA}, /* 04AA */
2492 {0x04AC, 0x04AD, 0x04AC}, {0x04AC, 0x04AD, 0x04AC}, /* 04AC */
2493 {0x04AE, 0x04AF, 0x04AE}, {0x04AE, 0x04AF, 0x04AE}, /* 04AE */
2494 {0x04B0, 0x04B1, 0x04B0}, {0x04B0, 0x04B1, 0x04B0}, /* 04B0 */
2495 {0x04B2, 0x04B3, 0x04B2}, {0x04B2, 0x04B3, 0x04B2}, /* 04B2 */
2496 {0x04B4, 0x04B5, 0x04B4}, {0x04B4, 0x04B5, 0x04B4}, /* 04B4 */
2497 {0x04B6, 0x04B7, 0x04B6}, {0x04B6, 0x04B7, 0x04B6}, /* 04B6 */
2498 {0x04B8, 0x04B9, 0x04B8}, {0x04B8, 0x04B9, 0x04B8}, /* 04B8 */
2499 {0x04BA, 0x04BB, 0x04BA}, {0x04BA, 0x04BB, 0x04BA}, /* 04BA */
2500 {0x04BC, 0x04BD, 0x04BC}, {0x04BC, 0x04BD, 0x04BC}, /* 04BC */
2501 {0x04BE, 0x04BF, 0x04BE}, {0x04BE, 0x04BF, 0x04BE}, /* 04BE */
2502 {0x04C0, 0x04CF, 0x04C0}, {0x04C1, 0x04C2, 0x0416}, /* 04C0 */
2503 {0x04C1, 0x04C2, 0x0416}, {0x04C3, 0x04C4, 0x04C3}, /* 04C2 */
2504 {0x04C3, 0x04C4, 0x04C3}, {0x04C5, 0x04C6, 0x04C5}, /* 04C4 */
2505 {0x04C5, 0x04C6, 0x04C5}, {0x04C7, 0x04C8, 0x04C7}, /* 04C6 */
2506 {0x04C7, 0x04C8, 0x04C7}, {0x04C9, 0x04CA, 0x04C9}, /* 04C8 */
2507 {0x04C9, 0x04CA, 0x04C9}, {0x04CB, 0x04CC, 0x04CB}, /* 04CA */
2508 {0x04CB, 0x04CC, 0x04CB}, {0x04CD, 0x04CE, 0x04CD}, /* 04CC */
2509 {0x04CD, 0x04CE, 0x04CD}, {0x04C0, 0x04CF, 0x04C0}, /* 04CE */
2510 {0x04D0, 0x04D1, 0x0410}, {0x04D0, 0x04D1, 0x0410}, /* 04D0 */
2511 {0x04D2, 0x04D3, 0x0410}, {0x04D2, 0x04D3, 0x0410}, /* 04D2 */
2512 {0x04D4, 0x04D5, 0x04D4}, {0x04D4, 0x04D5, 0x04D4}, /* 04D4 */
2513 {0x04D6, 0x04D7, 0x0415}, {0x04D6, 0x04D7, 0x0415}, /* 04D6 */
2514 {0x04D8, 0x04D9, 0x04D8}, {0x04D8, 0x04D9, 0x04D8}, /* 04D8 */
2515 {0x04DA, 0x04DB, 0x04D8}, {0x04DA, 0x04DB, 0x04D8}, /* 04DA */
2516 {0x04DC, 0x04DD, 0x0416}, {0x04DC, 0x04DD, 0x0416}, /* 04DC */
2517 {0x04DE, 0x04DF, 0x0417}, {0x04DE, 0x04DF, 0x0417}, /* 04DE */
2518 {0x04E0, 0x04E1, 0x04E0}, {0x04E0, 0x04E1, 0x04E0}, /* 04E0 */
2519 {0x04E2, 0x04E3, 0x0418}, {0x04E2, 0x04E3, 0x0418}, /* 04E2 */
2520 {0x04E4, 0x04E5, 0x0418}, {0x04E4, 0x04E5, 0x0418}, /* 04E4 */
2521 {0x04E6, 0x04E7, 0x041E}, {0x04E6, 0x04E7, 0x041E}, /* 04E6 */
2522 {0x04E8, 0x04E9, 0x04E8}, {0x04E8, 0x04E9, 0x04E8}, /* 04E8 */
2523 {0x04EA, 0x04EB, 0x04E8}, {0x04EA, 0x04EB, 0x04E8}, /* 04EA */
2524 {0x04EC, 0x04ED, 0x042D}, {0x04EC, 0x04ED, 0x042D}, /* 04EC */
2525 {0x04EE, 0x04EF, 0x0423}, {0x04EE, 0x04EF, 0x0423}, /* 04EE */
2526 {0x04F0, 0x04F1, 0x0423}, {0x04F0, 0x04F1, 0x0423}, /* 04F0 */
2527 {0x04F2, 0x04F3, 0x0423}, {0x04F2, 0x04F3, 0x0423}, /* 04F2 */
2528 {0x04F4, 0x04F5, 0x0427}, {0x04F4, 0x04F5, 0x0427}, /* 04F4 */
2529 {0x04F6, 0x04F7, 0x04F6}, {0x04F6, 0x04F7, 0x04F6}, /* 04F6 */
2530 {0x04F8, 0x04F9, 0x042B}, {0x04F8, 0x04F9, 0x042B}, /* 04F8 */
2531 {0x04FA, 0x04FB, 0x04FA}, {0x04FA, 0x04FB, 0x04FA}, /* 04FA */
2532 {0x04FC, 0x04FD, 0x04FC}, {0x04FC, 0x04FD, 0x04FC}, /* 04FC */
2533 {0x04FE, 0x04FF, 0x04FE}, {0x04FE, 0x04FF, 0x04FE} /* 04FE */
2534 };
2535
2536 static const MY_UNICASE_CHARACTER u520p05[] = {
2537 {0x0500, 0x0501, 0x0500}, {0x0500, 0x0501, 0x0500}, /* 0500 */
2538 {0x0502, 0x0503, 0x0502}, {0x0502, 0x0503, 0x0502}, /* 0502 */
2539 {0x0504, 0x0505, 0x0504}, {0x0504, 0x0505, 0x0504}, /* 0504 */
2540 {0x0506, 0x0507, 0x0506}, {0x0506, 0x0507, 0x0506}, /* 0506 */
2541 {0x0508, 0x0509, 0x0508}, {0x0508, 0x0509, 0x0508}, /* 0508 */
2542 {0x050A, 0x050B, 0x050A}, {0x050A, 0x050B, 0x050A}, /* 050A */
2543 {0x050C, 0x050D, 0x050C}, {0x050C, 0x050D, 0x050C}, /* 050C */
2544 {0x050E, 0x050F, 0x050E}, {0x050E, 0x050F, 0x050E}, /* 050E */
2545 {0x0510, 0x0511, 0x0510}, {0x0510, 0x0511, 0x0510}, /* 0510 */
2546 {0x0512, 0x0513, 0x0512}, {0x0512, 0x0513, 0x0512}, /* 0512 */
2547 {0x0514, 0x0515, 0x0514}, {0x0514, 0x0515, 0x0514}, /* 0514 */
2548 {0x0516, 0x0517, 0x0516}, {0x0516, 0x0517, 0x0516}, /* 0516 */
2549 {0x0518, 0x0519, 0x0518}, {0x0518, 0x0519, 0x0518}, /* 0518 */
2550 {0x051A, 0x051B, 0x051A}, {0x051A, 0x051B, 0x051A}, /* 051A */
2551 {0x051C, 0x051D, 0x051C}, {0x051C, 0x051D, 0x051C}, /* 051C */
2552 {0x051E, 0x051F, 0x051E}, {0x051E, 0x051F, 0x051E}, /* 051E */
2553 {0x0520, 0x0521, 0x0520}, {0x0520, 0x0521, 0x0520}, /* 0520 */
2554 {0x0522, 0x0523, 0x0522}, {0x0522, 0x0523, 0x0522}, /* 0522 */
2555 {0x0524, 0x0525, 0x0524}, {0x0524, 0x0525, 0x0524}, /* 0524 */
2556 {0x0526, 0x0526, 0x0526}, {0x0527, 0x0527, 0x0527}, /* 0526 */
2557 {0x0528, 0x0528, 0x0528}, {0x0529, 0x0529, 0x0529}, /* 0528 */
2558 {0x052A, 0x052A, 0x052A}, {0x052B, 0x052B, 0x052B}, /* 052A */
2559 {0x052C, 0x052C, 0x052C}, {0x052D, 0x052D, 0x052D}, /* 052C */
2560 {0x052E, 0x052E, 0x052E}, {0x052F, 0x052F, 0x052F}, /* 052E */
2561 {0x0530, 0x0530, 0x0530}, {0x0531, 0x0561, 0x0531}, /* 0530 */
2562 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533}, /* 0532 */
2563 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535}, /* 0534 */
2564 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537}, /* 0536 */
2565 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539}, /* 0538 */
2566 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B}, /* 053A */
2567 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D}, /* 053C */
2568 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F}, /* 053E */
2569 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541}, /* 0540 */
2570 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543}, /* 0542 */
2571 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545}, /* 0544 */
2572 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547}, /* 0546 */
2573 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549}, /* 0548 */
2574 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B}, /* 054A */
2575 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D}, /* 054C */
2576 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F}, /* 054E */
2577 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551}, /* 0550 */
2578 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553}, /* 0552 */
2579 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555}, /* 0554 */
2580 {0x0556, 0x0586, 0x0556}, {0x0557, 0x0557, 0x0557}, /* 0556 */
2581 {0x0558, 0x0558, 0x0558}, {0x0559, 0x0559, 0x0559}, /* 0558 */
2582 {0x055A, 0x055A, 0x055A}, {0x055B, 0x055B, 0x055B}, /* 055A */
2583 {0x055C, 0x055C, 0x055C}, {0x055D, 0x055D, 0x055D}, /* 055C */
2584 {0x055E, 0x055E, 0x055E}, {0x055F, 0x055F, 0x055F}, /* 055E */
2585 {0x0560, 0x0560, 0x0560}, {0x0531, 0x0561, 0x0531}, /* 0560 */
2586 {0x0532, 0x0562, 0x0532}, {0x0533, 0x0563, 0x0533}, /* 0562 */
2587 {0x0534, 0x0564, 0x0534}, {0x0535, 0x0565, 0x0535}, /* 0564 */
2588 {0x0536, 0x0566, 0x0536}, {0x0537, 0x0567, 0x0537}, /* 0566 */
2589 {0x0538, 0x0568, 0x0538}, {0x0539, 0x0569, 0x0539}, /* 0568 */
2590 {0x053A, 0x056A, 0x053A}, {0x053B, 0x056B, 0x053B}, /* 056A */
2591 {0x053C, 0x056C, 0x053C}, {0x053D, 0x056D, 0x053D}, /* 056C */
2592 {0x053E, 0x056E, 0x053E}, {0x053F, 0x056F, 0x053F}, /* 056E */
2593 {0x0540, 0x0570, 0x0540}, {0x0541, 0x0571, 0x0541}, /* 0570 */
2594 {0x0542, 0x0572, 0x0542}, {0x0543, 0x0573, 0x0543}, /* 0572 */
2595 {0x0544, 0x0574, 0x0544}, {0x0545, 0x0575, 0x0545}, /* 0574 */
2596 {0x0546, 0x0576, 0x0546}, {0x0547, 0x0577, 0x0547}, /* 0576 */
2597 {0x0548, 0x0578, 0x0548}, {0x0549, 0x0579, 0x0549}, /* 0578 */
2598 {0x054A, 0x057A, 0x054A}, {0x054B, 0x057B, 0x054B}, /* 057A */
2599 {0x054C, 0x057C, 0x054C}, {0x054D, 0x057D, 0x054D}, /* 057C */
2600 {0x054E, 0x057E, 0x054E}, {0x054F, 0x057F, 0x054F}, /* 057E */
2601 {0x0550, 0x0580, 0x0550}, {0x0551, 0x0581, 0x0551}, /* 0580 */
2602 {0x0552, 0x0582, 0x0552}, {0x0553, 0x0583, 0x0553}, /* 0582 */
2603 {0x0554, 0x0584, 0x0554}, {0x0555, 0x0585, 0x0555}, /* 0584 */
2604 {0x0556, 0x0586, 0x0556}, {0x0587, 0x0587, 0x0587}, /* 0586 */
2605 {0x0588, 0x0588, 0x0588}, {0x0589, 0x0589, 0x0589}, /* 0588 */
2606 {0x058A, 0x058A, 0x058A}, {0x058B, 0x058B, 0x058B}, /* 058A */
2607 {0x058C, 0x058C, 0x058C}, {0x058D, 0x058D, 0x058D}, /* 058C */
2608 {0x058E, 0x058E, 0x058E}, {0x058F, 0x058F, 0x058F}, /* 058E */
2609 {0x0590, 0x0590, 0x0590}, {0x0591, 0x0591, 0x0591}, /* 0590 */
2610 {0x0592, 0x0592, 0x0592}, {0x0593, 0x0593, 0x0593}, /* 0592 */
2611 {0x0594, 0x0594, 0x0594}, {0x0595, 0x0595, 0x0595}, /* 0594 */
2612 {0x0596, 0x0596, 0x0596}, {0x0597, 0x0597, 0x0597}, /* 0596 */
2613 {0x0598, 0x0598, 0x0598}, {0x0599, 0x0599, 0x0599}, /* 0598 */
2614 {0x059A, 0x059A, 0x059A}, {0x059B, 0x059B, 0x059B}, /* 059A */
2615 {0x059C, 0x059C, 0x059C}, {0x059D, 0x059D, 0x059D}, /* 059C */
2616 {0x059E, 0x059E, 0x059E}, {0x059F, 0x059F, 0x059F}, /* 059E */
2617 {0x05A0, 0x05A0, 0x05A0}, {0x05A1, 0x05A1, 0x05A1}, /* 05A0 */
2618 {0x05A2, 0x05A2, 0x05A2}, {0x05A3, 0x05A3, 0x05A3}, /* 05A2 */
2619 {0x05A4, 0x05A4, 0x05A4}, {0x05A5, 0x05A5, 0x05A5}, /* 05A4 */
2620 {0x05A6, 0x05A6, 0x05A6}, {0x05A7, 0x05A7, 0x05A7}, /* 05A6 */
2621 {0x05A8, 0x05A8, 0x05A8}, {0x05A9, 0x05A9, 0x05A9}, /* 05A8 */
2622 {0x05AA, 0x05AA, 0x05AA}, {0x05AB, 0x05AB, 0x05AB}, /* 05AA */
2623 {0x05AC, 0x05AC, 0x05AC}, {0x05AD, 0x05AD, 0x05AD}, /* 05AC */
2624 {0x05AE, 0x05AE, 0x05AE}, {0x05AF, 0x05AF, 0x05AF}, /* 05AE */
2625 {0x05B0, 0x05B0, 0x05B0}, {0x05B1, 0x05B1, 0x05B1}, /* 05B0 */
2626 {0x05B2, 0x05B2, 0x05B2}, {0x05B3, 0x05B3, 0x05B3}, /* 05B2 */
2627 {0x05B4, 0x05B4, 0x05B4}, {0x05B5, 0x05B5, 0x05B5}, /* 05B4 */
2628 {0x05B6, 0x05B6, 0x05B6}, {0x05B7, 0x05B7, 0x05B7}, /* 05B6 */
2629 {0x05B8, 0x05B8, 0x05B8}, {0x05B9, 0x05B9, 0x05B9}, /* 05B8 */
2630 {0x05BA, 0x05BA, 0x05BA}, {0x05BB, 0x05BB, 0x05BB}, /* 05BA */
2631 {0x05BC, 0x05BC, 0x05BC}, {0x05BD, 0x05BD, 0x05BD}, /* 05BC */
2632 {0x05BE, 0x05BE, 0x05BE}, {0x05BF, 0x05BF, 0x05BF}, /* 05BE */
2633 {0x05C0, 0x05C0, 0x05C0}, {0x05C1, 0x05C1, 0x05C1}, /* 05C0 */
2634 {0x05C2, 0x05C2, 0x05C2}, {0x05C3, 0x05C3, 0x05C3}, /* 05C2 */
2635 {0x05C4, 0x05C4, 0x05C4}, {0x05C5, 0x05C5, 0x05C5}, /* 05C4 */
2636 {0x05C6, 0x05C6, 0x05C6}, {0x05C7, 0x05C7, 0x05C7}, /* 05C6 */
2637 {0x05C8, 0x05C8, 0x05C8}, {0x05C9, 0x05C9, 0x05C9}, /* 05C8 */
2638 {0x05CA, 0x05CA, 0x05CA}, {0x05CB, 0x05CB, 0x05CB}, /* 05CA */
2639 {0x05CC, 0x05CC, 0x05CC}, {0x05CD, 0x05CD, 0x05CD}, /* 05CC */
2640 {0x05CE, 0x05CE, 0x05CE}, {0x05CF, 0x05CF, 0x05CF}, /* 05CE */
2641 {0x05D0, 0x05D0, 0x05D0}, {0x05D1, 0x05D1, 0x05D1}, /* 05D0 */
2642 {0x05D2, 0x05D2, 0x05D2}, {0x05D3, 0x05D3, 0x05D3}, /* 05D2 */
2643 {0x05D4, 0x05D4, 0x05D4}, {0x05D5, 0x05D5, 0x05D5}, /* 05D4 */
2644 {0x05D6, 0x05D6, 0x05D6}, {0x05D7, 0x05D7, 0x05D7}, /* 05D6 */
2645 {0x05D8, 0x05D8, 0x05D8}, {0x05D9, 0x05D9, 0x05D9}, /* 05D8 */
2646 {0x05DA, 0x05DA, 0x05DA}, {0x05DB, 0x05DB, 0x05DB}, /* 05DA */
2647 {0x05DC, 0x05DC, 0x05DC}, {0x05DD, 0x05DD, 0x05DD}, /* 05DC */
2648 {0x05DE, 0x05DE, 0x05DE}, {0x05DF, 0x05DF, 0x05DF}, /* 05DE */
2649 {0x05E0, 0x05E0, 0x05E0}, {0x05E1, 0x05E1, 0x05E1}, /* 05E0 */
2650 {0x05E2, 0x05E2, 0x05E2}, {0x05E3, 0x05E3, 0x05E3}, /* 05E2 */
2651 {0x05E4, 0x05E4, 0x05E4}, {0x05E5, 0x05E5, 0x05E5}, /* 05E4 */
2652 {0x05E6, 0x05E6, 0x05E6}, {0x05E7, 0x05E7, 0x05E7}, /* 05E6 */
2653 {0x05E8, 0x05E8, 0x05E8}, {0x05E9, 0x05E9, 0x05E9}, /* 05E8 */
2654 {0x05EA, 0x05EA, 0x05EA}, {0x05EB, 0x05EB, 0x05EB}, /* 05EA */
2655 {0x05EC, 0x05EC, 0x05EC}, {0x05ED, 0x05ED, 0x05ED}, /* 05EC */
2656 {0x05EE, 0x05EE, 0x05EE}, {0x05EF, 0x05EF, 0x05EF}, /* 05EE */
2657 {0x05F0, 0x05F0, 0x05F0}, {0x05F1, 0x05F1, 0x05F1}, /* 05F0 */
2658 {0x05F2, 0x05F2, 0x05F2}, {0x05F3, 0x05F3, 0x05F3}, /* 05F2 */
2659 {0x05F4, 0x05F4, 0x05F4}, {0x05F5, 0x05F5, 0x05F5}, /* 05F4 */
2660 {0x05F6, 0x05F6, 0x05F6}, {0x05F7, 0x05F7, 0x05F7}, /* 05F6 */
2661 {0x05F8, 0x05F8, 0x05F8}, {0x05F9, 0x05F9, 0x05F9}, /* 05F8 */
2662 {0x05FA, 0x05FA, 0x05FA}, {0x05FB, 0x05FB, 0x05FB}, /* 05FA */
2663 {0x05FC, 0x05FC, 0x05FC}, {0x05FD, 0x05FD, 0x05FD}, /* 05FC */
2664 {0x05FE, 0x05FE, 0x05FE}, {0x05FF, 0x05FF, 0x05FF} /* 05FE */
2665 };
2666
2667 static const MY_UNICASE_CHARACTER u520p10[] = {
2668 {0x1000, 0x1000, 0x1000}, {0x1001, 0x1001, 0x1001}, /* 1000 */
2669 {0x1002, 0x1002, 0x1002}, {0x1003, 0x1003, 0x1003}, /* 1002 */
2670 {0x1004, 0x1004, 0x1004}, {0x1005, 0x1005, 0x1005}, /* 1004 */
2671 {0x1006, 0x1006, 0x1006}, {0x1007, 0x1007, 0x1007}, /* 1006 */
2672 {0x1008, 0x1008, 0x1008}, {0x1009, 0x1009, 0x1009}, /* 1008 */
2673 {0x100A, 0x100A, 0x100A}, {0x100B, 0x100B, 0x100B}, /* 100A */
2674 {0x100C, 0x100C, 0x100C}, {0x100D, 0x100D, 0x100D}, /* 100C */
2675 {0x100E, 0x100E, 0x100E}, {0x100F, 0x100F, 0x100F}, /* 100E */
2676 {0x1010, 0x1010, 0x1010}, {0x1011, 0x1011, 0x1011}, /* 1010 */
2677 {0x1012, 0x1012, 0x1012}, {0x1013, 0x1013, 0x1013}, /* 1012 */
2678 {0x1014, 0x1014, 0x1014}, {0x1015, 0x1015, 0x1015}, /* 1014 */
2679 {0x1016, 0x1016, 0x1016}, {0x1017, 0x1017, 0x1017}, /* 1016 */
2680 {0x1018, 0x1018, 0x1018}, {0x1019, 0x1019, 0x1019}, /* 1018 */
2681 {0x101A, 0x101A, 0x101A}, {0x101B, 0x101B, 0x101B}, /* 101A */
2682 {0x101C, 0x101C, 0x101C}, {0x101D, 0x101D, 0x101D}, /* 101C */
2683 {0x101E, 0x101E, 0x101E}, {0x101F, 0x101F, 0x101F}, /* 101E */
2684 {0x1020, 0x1020, 0x1020}, {0x1021, 0x1021, 0x1021}, /* 1020 */
2685 {0x1022, 0x1022, 0x1022}, {0x1023, 0x1023, 0x1023}, /* 1022 */
2686 {0x1024, 0x1024, 0x1024}, {0x1025, 0x1025, 0x1025}, /* 1024 */
2687 {0x1026, 0x1026, 0x1026}, {0x1027, 0x1027, 0x1027}, /* 1026 */
2688 {0x1028, 0x1028, 0x1028}, {0x1029, 0x1029, 0x1029}, /* 1028 */
2689 {0x102A, 0x102A, 0x102A}, {0x102B, 0x102B, 0x102B}, /* 102A */
2690 {0x102C, 0x102C, 0x102C}, {0x102D, 0x102D, 0x102D}, /* 102C */
2691 {0x102E, 0x102E, 0x102E}, {0x102F, 0x102F, 0x102F}, /* 102E */
2692 {0x1030, 0x1030, 0x1030}, {0x1031, 0x1031, 0x1031}, /* 1030 */
2693 {0x1032, 0x1032, 0x1032}, {0x1033, 0x1033, 0x1033}, /* 1032 */
2694 {0x1034, 0x1034, 0x1034}, {0x1035, 0x1035, 0x1035}, /* 1034 */
2695 {0x1036, 0x1036, 0x1036}, {0x1037, 0x1037, 0x1037}, /* 1036 */
2696 {0x1038, 0x1038, 0x1038}, {0x1039, 0x1039, 0x1039}, /* 1038 */
2697 {0x103A, 0x103A, 0x103A}, {0x103B, 0x103B, 0x103B}, /* 103A */
2698 {0x103C, 0x103C, 0x103C}, {0x103D, 0x103D, 0x103D}, /* 103C */
2699 {0x103E, 0x103E, 0x103E}, {0x103F, 0x103F, 0x103F}, /* 103E */
2700 {0x1040, 0x1040, 0x1040}, {0x1041, 0x1041, 0x1041}, /* 1040 */
2701 {0x1042, 0x1042, 0x1042}, {0x1043, 0x1043, 0x1043}, /* 1042 */
2702 {0x1044, 0x1044, 0x1044}, {0x1045, 0x1045, 0x1045}, /* 1044 */
2703 {0x1046, 0x1046, 0x1046}, {0x1047, 0x1047, 0x1047}, /* 1046 */
2704 {0x1048, 0x1048, 0x1048}, {0x1049, 0x1049, 0x1049}, /* 1048 */
2705 {0x104A, 0x104A, 0x104A}, {0x104B, 0x104B, 0x104B}, /* 104A */
2706 {0x104C, 0x104C, 0x104C}, {0x104D, 0x104D, 0x104D}, /* 104C */
2707 {0x104E, 0x104E, 0x104E}, {0x104F, 0x104F, 0x104F}, /* 104E */
2708 {0x1050, 0x1050, 0x1050}, {0x1051, 0x1051, 0x1051}, /* 1050 */
2709 {0x1052, 0x1052, 0x1052}, {0x1053, 0x1053, 0x1053}, /* 1052 */
2710 {0x1054, 0x1054, 0x1054}, {0x1055, 0x1055, 0x1055}, /* 1054 */
2711 {0x1056, 0x1056, 0x1056}, {0x1057, 0x1057, 0x1057}, /* 1056 */
2712 {0x1058, 0x1058, 0x1058}, {0x1059, 0x1059, 0x1059}, /* 1058 */
2713 {0x105A, 0x105A, 0x105A}, {0x105B, 0x105B, 0x105B}, /* 105A */
2714 {0x105C, 0x105C, 0x105C}, {0x105D, 0x105D, 0x105D}, /* 105C */
2715 {0x105E, 0x105E, 0x105E}, {0x105F, 0x105F, 0x105F}, /* 105E */
2716 {0x1060, 0x1060, 0x1060}, {0x1061, 0x1061, 0x1061}, /* 1060 */
2717 {0x1062, 0x1062, 0x1062}, {0x1063, 0x1063, 0x1063}, /* 1062 */
2718 {0x1064, 0x1064, 0x1064}, {0x1065, 0x1065, 0x1065}, /* 1064 */
2719 {0x1066, 0x1066, 0x1066}, {0x1067, 0x1067, 0x1067}, /* 1066 */
2720 {0x1068, 0x1068, 0x1068}, {0x1069, 0x1069, 0x1069}, /* 1068 */
2721 {0x106A, 0x106A, 0x106A}, {0x106B, 0x106B, 0x106B}, /* 106A */
2722 {0x106C, 0x106C, 0x106C}, {0x106D, 0x106D, 0x106D}, /* 106C */
2723 {0x106E, 0x106E, 0x106E}, {0x106F, 0x106F, 0x106F}, /* 106E */
2724 {0x1070, 0x1070, 0x1070}, {0x1071, 0x1071, 0x1071}, /* 1070 */
2725 {0x1072, 0x1072, 0x1072}, {0x1073, 0x1073, 0x1073}, /* 1072 */
2726 {0x1074, 0x1074, 0x1074}, {0x1075, 0x1075, 0x1075}, /* 1074 */
2727 {0x1076, 0x1076, 0x1076}, {0x1077, 0x1077, 0x1077}, /* 1076 */
2728 {0x1078, 0x1078, 0x1078}, {0x1079, 0x1079, 0x1079}, /* 1078 */
2729 {0x107A, 0x107A, 0x107A}, {0x107B, 0x107B, 0x107B}, /* 107A */
2730 {0x107C, 0x107C, 0x107C}, {0x107D, 0x107D, 0x107D}, /* 107C */
2731 {0x107E, 0x107E, 0x107E}, {0x107F, 0x107F, 0x107F}, /* 107E */
2732 {0x1080, 0x1080, 0x1080}, {0x1081, 0x1081, 0x1081}, /* 1080 */
2733 {0x1082, 0x1082, 0x1082}, {0x1083, 0x1083, 0x1083}, /* 1082 */
2734 {0x1084, 0x1084, 0x1084}, {0x1085, 0x1085, 0x1085}, /* 1084 */
2735 {0x1086, 0x1086, 0x1086}, {0x1087, 0x1087, 0x1087}, /* 1086 */
2736 {0x1088, 0x1088, 0x1088}, {0x1089, 0x1089, 0x1089}, /* 1088 */
2737 {0x108A, 0x108A, 0x108A}, {0x108B, 0x108B, 0x108B}, /* 108A */
2738 {0x108C, 0x108C, 0x108C}, {0x108D, 0x108D, 0x108D}, /* 108C */
2739 {0x108E, 0x108E, 0x108E}, {0x108F, 0x108F, 0x108F}, /* 108E */
2740 {0x1090, 0x1090, 0x1090}, {0x1091, 0x1091, 0x1091}, /* 1090 */
2741 {0x1092, 0x1092, 0x1092}, {0x1093, 0x1093, 0x1093}, /* 1092 */
2742 {0x1094, 0x1094, 0x1094}, {0x1095, 0x1095, 0x1095}, /* 1094 */
2743 {0x1096, 0x1096, 0x1096}, {0x1097, 0x1097, 0x1097}, /* 1096 */
2744 {0x1098, 0x1098, 0x1098}, {0x1099, 0x1099, 0x1099}, /* 1098 */
2745 {0x109A, 0x109A, 0x109A}, {0x109B, 0x109B, 0x109B}, /* 109A */
2746 {0x109C, 0x109C, 0x109C}, {0x109D, 0x109D, 0x109D}, /* 109C */
2747 {0x109E, 0x109E, 0x109E}, {0x109F, 0x109F, 0x109F}, /* 109E */
2748 {0x10A0, 0x2D00, 0x10A0}, {0x10A1, 0x2D01, 0x10A1}, /* 10A0 */
2749 {0x10A2, 0x2D02, 0x10A2}, {0x10A3, 0x2D03, 0x10A3}, /* 10A2 */
2750 {0x10A4, 0x2D04, 0x10A4}, {0x10A5, 0x2D05, 0x10A5}, /* 10A4 */
2751 {0x10A6, 0x2D06, 0x10A6}, {0x10A7, 0x2D07, 0x10A7}, /* 10A6 */
2752 {0x10A8, 0x2D08, 0x10A8}, {0x10A9, 0x2D09, 0x10A9}, /* 10A8 */
2753 {0x10AA, 0x2D0A, 0x10AA}, {0x10AB, 0x2D0B, 0x10AB}, /* 10AA */
2754 {0x10AC, 0x2D0C, 0x10AC}, {0x10AD, 0x2D0D, 0x10AD}, /* 10AC */
2755 {0x10AE, 0x2D0E, 0x10AE}, {0x10AF, 0x2D0F, 0x10AF}, /* 10AE */
2756 {0x10B0, 0x2D10, 0x10B0}, {0x10B1, 0x2D11, 0x10B1}, /* 10B0 */
2757 {0x10B2, 0x2D12, 0x10B2}, {0x10B3, 0x2D13, 0x10B3}, /* 10B2 */
2758 {0x10B4, 0x2D14, 0x10B4}, {0x10B5, 0x2D15, 0x10B5}, /* 10B4 */
2759 {0x10B6, 0x2D16, 0x10B6}, {0x10B7, 0x2D17, 0x10B7}, /* 10B6 */
2760 {0x10B8, 0x2D18, 0x10B8}, {0x10B9, 0x2D19, 0x10B9}, /* 10B8 */
2761 {0x10BA, 0x2D1A, 0x10BA}, {0x10BB, 0x2D1B, 0x10BB}, /* 10BA */
2762 {0x10BC, 0x2D1C, 0x10BC}, {0x10BD, 0x2D1D, 0x10BD}, /* 10BC */
2763 {0x10BE, 0x2D1E, 0x10BE}, {0x10BF, 0x2D1F, 0x10BF}, /* 10BE */
2764 {0x10C0, 0x2D20, 0x10C0}, {0x10C1, 0x2D21, 0x10C1}, /* 10C0 */
2765 {0x10C2, 0x2D22, 0x10C2}, {0x10C3, 0x2D23, 0x10C3}, /* 10C2 */
2766 {0x10C4, 0x2D24, 0x10C4}, {0x10C5, 0x2D25, 0x10C5}, /* 10C4 */
2767 {0x10C6, 0x10C6, 0x10C6}, {0x10C7, 0x10C7, 0x10C7}, /* 10C6 */
2768 {0x10C8, 0x10C8, 0x10C8}, {0x10C9, 0x10C9, 0x10C9}, /* 10C8 */
2769 {0x10CA, 0x10CA, 0x10CA}, {0x10CB, 0x10CB, 0x10CB}, /* 10CA */
2770 {0x10CC, 0x10CC, 0x10CC}, {0x10CD, 0x10CD, 0x10CD}, /* 10CC */
2771 {0x10CE, 0x10CE, 0x10CE}, {0x10CF, 0x10CF, 0x10CF}, /* 10CE */
2772 {0x10D0, 0x10D0, 0x10D0}, {0x10D1, 0x10D1, 0x10D1}, /* 10D0 */
2773 {0x10D2, 0x10D2, 0x10D2}, {0x10D3, 0x10D3, 0x10D3}, /* 10D2 */
2774 {0x10D4, 0x10D4, 0x10D4}, {0x10D5, 0x10D5, 0x10D5}, /* 10D4 */
2775 {0x10D6, 0x10D6, 0x10D6}, {0x10D7, 0x10D7, 0x10D7}, /* 10D6 */
2776 {0x10D8, 0x10D8, 0x10D8}, {0x10D9, 0x10D9, 0x10D9}, /* 10D8 */
2777 {0x10DA, 0x10DA, 0x10DA}, {0x10DB, 0x10DB, 0x10DB}, /* 10DA */
2778 {0x10DC, 0x10DC, 0x10DC}, {0x10DD, 0x10DD, 0x10DD}, /* 10DC */
2779 {0x10DE, 0x10DE, 0x10DE}, {0x10DF, 0x10DF, 0x10DF}, /* 10DE */
2780 {0x10E0, 0x10E0, 0x10E0}, {0x10E1, 0x10E1, 0x10E1}, /* 10E0 */
2781 {0x10E2, 0x10E2, 0x10E2}, {0x10E3, 0x10E3, 0x10E3}, /* 10E2 */
2782 {0x10E4, 0x10E4, 0x10E4}, {0x10E5, 0x10E5, 0x10E5}, /* 10E4 */
2783 {0x10E6, 0x10E6, 0x10E6}, {0x10E7, 0x10E7, 0x10E7}, /* 10E6 */
2784 {0x10E8, 0x10E8, 0x10E8}, {0x10E9, 0x10E9, 0x10E9}, /* 10E8 */
2785 {0x10EA, 0x10EA, 0x10EA}, {0x10EB, 0x10EB, 0x10EB}, /* 10EA */
2786 {0x10EC, 0x10EC, 0x10EC}, {0x10ED, 0x10ED, 0x10ED}, /* 10EC */
2787 {0x10EE, 0x10EE, 0x10EE}, {0x10EF, 0x10EF, 0x10EF}, /* 10EE */
2788 {0x10F0, 0x10F0, 0x10F0}, {0x10F1, 0x10F1, 0x10F1}, /* 10F0 */
2789 {0x10F2, 0x10F2, 0x10F2}, {0x10F3, 0x10F3, 0x10F3}, /* 10F2 */
2790 {0x10F4, 0x10F4, 0x10F4}, {0x10F5, 0x10F5, 0x10F5}, /* 10F4 */
2791 {0x10F6, 0x10F6, 0x10F6}, {0x10F7, 0x10F7, 0x10F7}, /* 10F6 */
2792 {0x10F8, 0x10F8, 0x10F8}, {0x10F9, 0x10F9, 0x10F9}, /* 10F8 */
2793 {0x10FA, 0x10FA, 0x10FA}, {0x10FB, 0x10FB, 0x10FB}, /* 10FA */
2794 {0x10FC, 0x10FC, 0x10FC}, {0x10FD, 0x10FD, 0x10FD}, /* 10FC */
2795 {0x10FE, 0x10FE, 0x10FE}, {0x10FF, 0x10FF, 0x10FF} /* 10FE */
2796 };
2797
2798 static const MY_UNICASE_CHARACTER u520p1D[] = {
2799 {0x1D00, 0x1D00, 0x1D00}, {0x1D01, 0x1D01, 0x1D01}, /* 1D00 */
2800 {0x1D02, 0x1D02, 0x1D02}, {0x1D03, 0x1D03, 0x1D03}, /* 1D02 */
2801 {0x1D04, 0x1D04, 0x1D04}, {0x1D05, 0x1D05, 0x1D05}, /* 1D04 */
2802 {0x1D06, 0x1D06, 0x1D06}, {0x1D07, 0x1D07, 0x1D07}, /* 1D06 */
2803 {0x1D08, 0x1D08, 0x1D08}, {0x1D09, 0x1D09, 0x1D09}, /* 1D08 */
2804 {0x1D0A, 0x1D0A, 0x1D0A}, {0x1D0B, 0x1D0B, 0x1D0B}, /* 1D0A */
2805 {0x1D0C, 0x1D0C, 0x1D0C}, {0x1D0D, 0x1D0D, 0x1D0D}, /* 1D0C */
2806 {0x1D0E, 0x1D0E, 0x1D0E}, {0x1D0F, 0x1D0F, 0x1D0F}, /* 1D0E */
2807 {0x1D10, 0x1D10, 0x1D10}, {0x1D11, 0x1D11, 0x1D11}, /* 1D10 */
2808 {0x1D12, 0x1D12, 0x1D12}, {0x1D13, 0x1D13, 0x1D13}, /* 1D12 */
2809 {0x1D14, 0x1D14, 0x1D14}, {0x1D15, 0x1D15, 0x1D15}, /* 1D14 */
2810 {0x1D16, 0x1D16, 0x1D16}, {0x1D17, 0x1D17, 0x1D17}, /* 1D16 */
2811 {0x1D18, 0x1D18, 0x1D18}, {0x1D19, 0x1D19, 0x1D19}, /* 1D18 */
2812 {0x1D1A, 0x1D1A, 0x1D1A}, {0x1D1B, 0x1D1B, 0x1D1B}, /* 1D1A */
2813 {0x1D1C, 0x1D1C, 0x1D1C}, {0x1D1D, 0x1D1D, 0x1D1D}, /* 1D1C */
2814 {0x1D1E, 0x1D1E, 0x1D1E}, {0x1D1F, 0x1D1F, 0x1D1F}, /* 1D1E */
2815 {0x1D20, 0x1D20, 0x1D20}, {0x1D21, 0x1D21, 0x1D21}, /* 1D20 */
2816 {0x1D22, 0x1D22, 0x1D22}, {0x1D23, 0x1D23, 0x1D23}, /* 1D22 */
2817 {0x1D24, 0x1D24, 0x1D24}, {0x1D25, 0x1D25, 0x1D25}, /* 1D24 */
2818 {0x1D26, 0x1D26, 0x1D26}, {0x1D27, 0x1D27, 0x1D27}, /* 1D26 */
2819 {0x1D28, 0x1D28, 0x1D28}, {0x1D29, 0x1D29, 0x1D29}, /* 1D28 */
2820 {0x1D2A, 0x1D2A, 0x1D2A}, {0x1D2B, 0x1D2B, 0x1D2B}, /* 1D2A */
2821 {0x1D2C, 0x1D2C, 0x1D2C}, {0x1D2D, 0x1D2D, 0x1D2D}, /* 1D2C */
2822 {0x1D2E, 0x1D2E, 0x1D2E}, {0x1D2F, 0x1D2F, 0x1D2F}, /* 1D2E */
2823 {0x1D30, 0x1D30, 0x1D30}, {0x1D31, 0x1D31, 0x1D31}, /* 1D30 */
2824 {0x1D32, 0x1D32, 0x1D32}, {0x1D33, 0x1D33, 0x1D33}, /* 1D32 */
2825 {0x1D34, 0x1D34, 0x1D34}, {0x1D35, 0x1D35, 0x1D35}, /* 1D34 */
2826 {0x1D36, 0x1D36, 0x1D36}, {0x1D37, 0x1D37, 0x1D37}, /* 1D36 */
2827 {0x1D38, 0x1D38, 0x1D38}, {0x1D39, 0x1D39, 0x1D39}, /* 1D38 */
2828 {0x1D3A, 0x1D3A, 0x1D3A}, {0x1D3B, 0x1D3B, 0x1D3B}, /* 1D3A */
2829 {0x1D3C, 0x1D3C, 0x1D3C}, {0x1D3D, 0x1D3D, 0x1D3D}, /* 1D3C */
2830 {0x1D3E, 0x1D3E, 0x1D3E}, {0x1D3F, 0x1D3F, 0x1D3F}, /* 1D3E */
2831 {0x1D40, 0x1D40, 0x1D40}, {0x1D41, 0x1D41, 0x1D41}, /* 1D40 */
2832 {0x1D42, 0x1D42, 0x1D42}, {0x1D43, 0x1D43, 0x1D43}, /* 1D42 */
2833 {0x1D44, 0x1D44, 0x1D44}, {0x1D45, 0x1D45, 0x1D45}, /* 1D44 */
2834 {0x1D46, 0x1D46, 0x1D46}, {0x1D47, 0x1D47, 0x1D47}, /* 1D46 */
2835 {0x1D48, 0x1D48, 0x1D48}, {0x1D49, 0x1D49, 0x1D49}, /* 1D48 */
2836 {0x1D4A, 0x1D4A, 0x1D4A}, {0x1D4B, 0x1D4B, 0x1D4B}, /* 1D4A */
2837 {0x1D4C, 0x1D4C, 0x1D4C}, {0x1D4D, 0x1D4D, 0x1D4D}, /* 1D4C */
2838 {0x1D4E, 0x1D4E, 0x1D4E}, {0x1D4F, 0x1D4F, 0x1D4F}, /* 1D4E */
2839 {0x1D50, 0x1D50, 0x1D50}, {0x1D51, 0x1D51, 0x1D51}, /* 1D50 */
2840 {0x1D52, 0x1D52, 0x1D52}, {0x1D53, 0x1D53, 0x1D53}, /* 1D52 */
2841 {0x1D54, 0x1D54, 0x1D54}, {0x1D55, 0x1D55, 0x1D55}, /* 1D54 */
2842 {0x1D56, 0x1D56, 0x1D56}, {0x1D57, 0x1D57, 0x1D57}, /* 1D56 */
2843 {0x1D58, 0x1D58, 0x1D58}, {0x1D59, 0x1D59, 0x1D59}, /* 1D58 */
2844 {0x1D5A, 0x1D5A, 0x1D5A}, {0x1D5B, 0x1D5B, 0x1D5B}, /* 1D5A */
2845 {0x1D5C, 0x1D5C, 0x1D5C}, {0x1D5D, 0x1D5D, 0x1D5D}, /* 1D5C */
2846 {0x1D5E, 0x1D5E, 0x1D5E}, {0x1D5F, 0x1D5F, 0x1D5F}, /* 1D5E */
2847 {0x1D60, 0x1D60, 0x1D60}, {0x1D61, 0x1D61, 0x1D61}, /* 1D60 */
2848 {0x1D62, 0x1D62, 0x1D62}, {0x1D63, 0x1D63, 0x1D63}, /* 1D62 */
2849 {0x1D64, 0x1D64, 0x1D64}, {0x1D65, 0x1D65, 0x1D65}, /* 1D64 */
2850 {0x1D66, 0x1D66, 0x1D66}, {0x1D67, 0x1D67, 0x1D67}, /* 1D66 */
2851 {0x1D68, 0x1D68, 0x1D68}, {0x1D69, 0x1D69, 0x1D69}, /* 1D68 */
2852 {0x1D6A, 0x1D6A, 0x1D6A}, {0x1D6B, 0x1D6B, 0x1D6B}, /* 1D6A */
2853 {0x1D6C, 0x1D6C, 0x1D6C}, {0x1D6D, 0x1D6D, 0x1D6D}, /* 1D6C */
2854 {0x1D6E, 0x1D6E, 0x1D6E}, {0x1D6F, 0x1D6F, 0x1D6F}, /* 1D6E */
2855 {0x1D70, 0x1D70, 0x1D70}, {0x1D71, 0x1D71, 0x1D71}, /* 1D70 */
2856 {0x1D72, 0x1D72, 0x1D72}, {0x1D73, 0x1D73, 0x1D73}, /* 1D72 */
2857 {0x1D74, 0x1D74, 0x1D74}, {0x1D75, 0x1D75, 0x1D75}, /* 1D74 */
2858 {0x1D76, 0x1D76, 0x1D76}, {0x1D77, 0x1D77, 0x1D77}, /* 1D76 */
2859 {0x1D78, 0x1D78, 0x1D78}, {0xA77D, 0x1D79, 0xA77D}, /* 1D78 */
2860 {0x1D7A, 0x1D7A, 0x1D7A}, {0x1D7B, 0x1D7B, 0x1D7B}, /* 1D7A */
2861 {0x1D7C, 0x1D7C, 0x1D7C}, {0x2C63, 0x1D7D, 0x2C63}, /* 1D7C */
2862 {0x1D7E, 0x1D7E, 0x1D7E}, {0x1D7F, 0x1D7F, 0x1D7F}, /* 1D7E */
2863 {0x1D80, 0x1D80, 0x1D80}, {0x1D81, 0x1D81, 0x1D81}, /* 1D80 */
2864 {0x1D82, 0x1D82, 0x1D82}, {0x1D83, 0x1D83, 0x1D83}, /* 1D82 */
2865 {0x1D84, 0x1D84, 0x1D84}, {0x1D85, 0x1D85, 0x1D85}, /* 1D84 */
2866 {0x1D86, 0x1D86, 0x1D86}, {0x1D87, 0x1D87, 0x1D87}, /* 1D86 */
2867 {0x1D88, 0x1D88, 0x1D88}, {0x1D89, 0x1D89, 0x1D89}, /* 1D88 */
2868 {0x1D8A, 0x1D8A, 0x1D8A}, {0x1D8B, 0x1D8B, 0x1D8B}, /* 1D8A */
2869 {0x1D8C, 0x1D8C, 0x1D8C}, {0x1D8D, 0x1D8D, 0x1D8D}, /* 1D8C */
2870 {0x1D8E, 0x1D8E, 0x1D8E}, {0x1D8F, 0x1D8F, 0x1D8F}, /* 1D8E */
2871 {0x1D90, 0x1D90, 0x1D90}, {0x1D91, 0x1D91, 0x1D91}, /* 1D90 */
2872 {0x1D92, 0x1D92, 0x1D92}, {0x1D93, 0x1D93, 0x1D93}, /* 1D92 */
2873 {0x1D94, 0x1D94, 0x1D94}, {0x1D95, 0x1D95, 0x1D95}, /* 1D94 */
2874 {0x1D96, 0x1D96, 0x1D96}, {0x1D97, 0x1D97, 0x1D97}, /* 1D96 */
2875 {0x1D98, 0x1D98, 0x1D98}, {0x1D99, 0x1D99, 0x1D99}, /* 1D98 */
2876 {0x1D9A, 0x1D9A, 0x1D9A}, {0x1D9B, 0x1D9B, 0x1D9B}, /* 1D9A */
2877 {0x1D9C, 0x1D9C, 0x1D9C}, {0x1D9D, 0x1D9D, 0x1D9D}, /* 1D9C */
2878 {0x1D9E, 0x1D9E, 0x1D9E}, {0x1D9F, 0x1D9F, 0x1D9F}, /* 1D9E */
2879 {0x1DA0, 0x1DA0, 0x1DA0}, {0x1DA1, 0x1DA1, 0x1DA1}, /* 1DA0 */
2880 {0x1DA2, 0x1DA2, 0x1DA2}, {0x1DA3, 0x1DA3, 0x1DA3}, /* 1DA2 */
2881 {0x1DA4, 0x1DA4, 0x1DA4}, {0x1DA5, 0x1DA5, 0x1DA5}, /* 1DA4 */
2882 {0x1DA6, 0x1DA6, 0x1DA6}, {0x1DA7, 0x1DA7, 0x1DA7}, /* 1DA6 */
2883 {0x1DA8, 0x1DA8, 0x1DA8}, {0x1DA9, 0x1DA9, 0x1DA9}, /* 1DA8 */
2884 {0x1DAA, 0x1DAA, 0x1DAA}, {0x1DAB, 0x1DAB, 0x1DAB}, /* 1DAA */
2885 {0x1DAC, 0x1DAC, 0x1DAC}, {0x1DAD, 0x1DAD, 0x1DAD}, /* 1DAC */
2886 {0x1DAE, 0x1DAE, 0x1DAE}, {0x1DAF, 0x1DAF, 0x1DAF}, /* 1DAE */
2887 {0x1DB0, 0x1DB0, 0x1DB0}, {0x1DB1, 0x1DB1, 0x1DB1}, /* 1DB0 */
2888 {0x1DB2, 0x1DB2, 0x1DB2}, {0x1DB3, 0x1DB3, 0x1DB3}, /* 1DB2 */
2889 {0x1DB4, 0x1DB4, 0x1DB4}, {0x1DB5, 0x1DB5, 0x1DB5}, /* 1DB4 */
2890 {0x1DB6, 0x1DB6, 0x1DB6}, {0x1DB7, 0x1DB7, 0x1DB7}, /* 1DB6 */
2891 {0x1DB8, 0x1DB8, 0x1DB8}, {0x1DB9, 0x1DB9, 0x1DB9}, /* 1DB8 */
2892 {0x1DBA, 0x1DBA, 0x1DBA}, {0x1DBB, 0x1DBB, 0x1DBB}, /* 1DBA */
2893 {0x1DBC, 0x1DBC, 0x1DBC}, {0x1DBD, 0x1DBD, 0x1DBD}, /* 1DBC */
2894 {0x1DBE, 0x1DBE, 0x1DBE}, {0x1DBF, 0x1DBF, 0x1DBF}, /* 1DBE */
2895 {0x1DC0, 0x1DC0, 0x1DC0}, {0x1DC1, 0x1DC1, 0x1DC1}, /* 1DC0 */
2896 {0x1DC2, 0x1DC2, 0x1DC2}, {0x1DC3, 0x1DC3, 0x1DC3}, /* 1DC2 */
2897 {0x1DC4, 0x1DC4, 0x1DC4}, {0x1DC5, 0x1DC5, 0x1DC5}, /* 1DC4 */
2898 {0x1DC6, 0x1DC6, 0x1DC6}, {0x1DC7, 0x1DC7, 0x1DC7}, /* 1DC6 */
2899 {0x1DC8, 0x1DC8, 0x1DC8}, {0x1DC9, 0x1DC9, 0x1DC9}, /* 1DC8 */
2900 {0x1DCA, 0x1DCA, 0x1DCA}, {0x1DCB, 0x1DCB, 0x1DCB}, /* 1DCA */
2901 {0x1DCC, 0x1DCC, 0x1DCC}, {0x1DCD, 0x1DCD, 0x1DCD}, /* 1DCC */
2902 {0x1DCE, 0x1DCE, 0x1DCE}, {0x1DCF, 0x1DCF, 0x1DCF}, /* 1DCE */
2903 {0x1DD0, 0x1DD0, 0x1DD0}, {0x1DD1, 0x1DD1, 0x1DD1}, /* 1DD0 */
2904 {0x1DD2, 0x1DD2, 0x1DD2}, {0x1DD3, 0x1DD3, 0x1DD3}, /* 1DD2 */
2905 {0x1DD4, 0x1DD4, 0x1DD4}, {0x1DD5, 0x1DD5, 0x1DD5}, /* 1DD4 */
2906 {0x1DD6, 0x1DD6, 0x1DD6}, {0x1DD7, 0x1DD7, 0x1DD7}, /* 1DD6 */
2907 {0x1DD8, 0x1DD8, 0x1DD8}, {0x1DD9, 0x1DD9, 0x1DD9}, /* 1DD8 */
2908 {0x1DDA, 0x1DDA, 0x1DDA}, {0x1DDB, 0x1DDB, 0x1DDB}, /* 1DDA */
2909 {0x1DDC, 0x1DDC, 0x1DDC}, {0x1DDD, 0x1DDD, 0x1DDD}, /* 1DDC */
2910 {0x1DDE, 0x1DDE, 0x1DDE}, {0x1DDF, 0x1DDF, 0x1DDF}, /* 1DDE */
2911 {0x1DE0, 0x1DE0, 0x1DE0}, {0x1DE1, 0x1DE1, 0x1DE1}, /* 1DE0 */
2912 {0x1DE2, 0x1DE2, 0x1DE2}, {0x1DE3, 0x1DE3, 0x1DE3}, /* 1DE2 */
2913 {0x1DE4, 0x1DE4, 0x1DE4}, {0x1DE5, 0x1DE5, 0x1DE5}, /* 1DE4 */
2914 {0x1DE6, 0x1DE6, 0x1DE6}, {0x1DE7, 0x1DE7, 0x1DE7}, /* 1DE6 */
2915 {0x1DE8, 0x1DE8, 0x1DE8}, {0x1DE9, 0x1DE9, 0x1DE9}, /* 1DE8 */
2916 {0x1DEA, 0x1DEA, 0x1DEA}, {0x1DEB, 0x1DEB, 0x1DEB}, /* 1DEA */
2917 {0x1DEC, 0x1DEC, 0x1DEC}, {0x1DED, 0x1DED, 0x1DED}, /* 1DEC */
2918 {0x1DEE, 0x1DEE, 0x1DEE}, {0x1DEF, 0x1DEF, 0x1DEF}, /* 1DEE */
2919 {0x1DF0, 0x1DF0, 0x1DF0}, {0x1DF1, 0x1DF1, 0x1DF1}, /* 1DF0 */
2920 {0x1DF2, 0x1DF2, 0x1DF2}, {0x1DF3, 0x1DF3, 0x1DF3}, /* 1DF2 */
2921 {0x1DF4, 0x1DF4, 0x1DF4}, {0x1DF5, 0x1DF5, 0x1DF5}, /* 1DF4 */
2922 {0x1DF6, 0x1DF6, 0x1DF6}, {0x1DF7, 0x1DF7, 0x1DF7}, /* 1DF6 */
2923 {0x1DF8, 0x1DF8, 0x1DF8}, {0x1DF9, 0x1DF9, 0x1DF9}, /* 1DF8 */
2924 {0x1DFA, 0x1DFA, 0x1DFA}, {0x1DFB, 0x1DFB, 0x1DFB}, /* 1DFA */
2925 {0x1DFC, 0x1DFC, 0x1DFC}, {0x1DFD, 0x1DFD, 0x1DFD}, /* 1DFC */
2926 {0x1DFE, 0x1DFE, 0x1DFE}, {0x1DFF, 0x1DFF, 0x1DFF} /* 1DFE */
2927 };
2928
2929 static const MY_UNICASE_CHARACTER u520p1E[] = {
2930 {0x1E00, 0x1E01, 0x0041}, {0x1E00, 0x1E01, 0x0041}, /* 1E00 */
2931 {0x1E02, 0x1E03, 0x0042}, {0x1E02, 0x1E03, 0x0042}, /* 1E02 */
2932 {0x1E04, 0x1E05, 0x0042}, {0x1E04, 0x1E05, 0x0042}, /* 1E04 */
2933 {0x1E06, 0x1E07, 0x0042}, {0x1E06, 0x1E07, 0x0042}, /* 1E06 */
2934 {0x1E08, 0x1E09, 0x0043}, {0x1E08, 0x1E09, 0x0043}, /* 1E08 */
2935 {0x1E0A, 0x1E0B, 0x0044}, {0x1E0A, 0x1E0B, 0x0044}, /* 1E0A */
2936 {0x1E0C, 0x1E0D, 0x0044}, {0x1E0C, 0x1E0D, 0x0044}, /* 1E0C */
2937 {0x1E0E, 0x1E0F, 0x0044}, {0x1E0E, 0x1E0F, 0x0044}, /* 1E0E */
2938 {0x1E10, 0x1E11, 0x0044}, {0x1E10, 0x1E11, 0x0044}, /* 1E10 */
2939 {0x1E12, 0x1E13, 0x0044}, {0x1E12, 0x1E13, 0x0044}, /* 1E12 */
2940 {0x1E14, 0x1E15, 0x0045}, {0x1E14, 0x1E15, 0x0045}, /* 1E14 */
2941 {0x1E16, 0x1E17, 0x0045}, {0x1E16, 0x1E17, 0x0045}, /* 1E16 */
2942 {0x1E18, 0x1E19, 0x0045}, {0x1E18, 0x1E19, 0x0045}, /* 1E18 */
2943 {0x1E1A, 0x1E1B, 0x0045}, {0x1E1A, 0x1E1B, 0x0045}, /* 1E1A */
2944 {0x1E1C, 0x1E1D, 0x0045}, {0x1E1C, 0x1E1D, 0x0045}, /* 1E1C */
2945 {0x1E1E, 0x1E1F, 0x0046}, {0x1E1E, 0x1E1F, 0x0046}, /* 1E1E */
2946 {0x1E20, 0x1E21, 0x0047}, {0x1E20, 0x1E21, 0x0047}, /* 1E20 */
2947 {0x1E22, 0x1E23, 0x0048}, {0x1E22, 0x1E23, 0x0048}, /* 1E22 */
2948 {0x1E24, 0x1E25, 0x0048}, {0x1E24, 0x1E25, 0x0048}, /* 1E24 */
2949 {0x1E26, 0x1E27, 0x0048}, {0x1E26, 0x1E27, 0x0048}, /* 1E26 */
2950 {0x1E28, 0x1E29, 0x0048}, {0x1E28, 0x1E29, 0x0048}, /* 1E28 */
2951 {0x1E2A, 0x1E2B, 0x0048}, {0x1E2A, 0x1E2B, 0x0048}, /* 1E2A */
2952 {0x1E2C, 0x1E2D, 0x0049}, {0x1E2C, 0x1E2D, 0x0049}, /* 1E2C */
2953 {0x1E2E, 0x1E2F, 0x0049}, {0x1E2E, 0x1E2F, 0x0049}, /* 1E2E */
2954 {0x1E30, 0x1E31, 0x004B}, {0x1E30, 0x1E31, 0x004B}, /* 1E30 */
2955 {0x1E32, 0x1E33, 0x004B}, {0x1E32, 0x1E33, 0x004B}, /* 1E32 */
2956 {0x1E34, 0x1E35, 0x004B}, {0x1E34, 0x1E35, 0x004B}, /* 1E34 */
2957 {0x1E36, 0x1E37, 0x004C}, {0x1E36, 0x1E37, 0x004C}, /* 1E36 */
2958 {0x1E38, 0x1E39, 0x004C}, {0x1E38, 0x1E39, 0x004C}, /* 1E38 */
2959 {0x1E3A, 0x1E3B, 0x004C}, {0x1E3A, 0x1E3B, 0x004C}, /* 1E3A */
2960 {0x1E3C, 0x1E3D, 0x004C}, {0x1E3C, 0x1E3D, 0x004C}, /* 1E3C */
2961 {0x1E3E, 0x1E3F, 0x004D}, {0x1E3E, 0x1E3F, 0x004D}, /* 1E3E */
2962 {0x1E40, 0x1E41, 0x004D}, {0x1E40, 0x1E41, 0x004D}, /* 1E40 */
2963 {0x1E42, 0x1E43, 0x004D}, {0x1E42, 0x1E43, 0x004D}, /* 1E42 */
2964 {0x1E44, 0x1E45, 0x004E}, {0x1E44, 0x1E45, 0x004E}, /* 1E44 */
2965 {0x1E46, 0x1E47, 0x004E}, {0x1E46, 0x1E47, 0x004E}, /* 1E46 */
2966 {0x1E48, 0x1E49, 0x004E}, {0x1E48, 0x1E49, 0x004E}, /* 1E48 */
2967 {0x1E4A, 0x1E4B, 0x004E}, {0x1E4A, 0x1E4B, 0x004E}, /* 1E4A */
2968 {0x1E4C, 0x1E4D, 0x004F}, {0x1E4C, 0x1E4D, 0x004F}, /* 1E4C */
2969 {0x1E4E, 0x1E4F, 0x004F}, {0x1E4E, 0x1E4F, 0x004F}, /* 1E4E */
2970 {0x1E50, 0x1E51, 0x004F}, {0x1E50, 0x1E51, 0x004F}, /* 1E50 */
2971 {0x1E52, 0x1E53, 0x004F}, {0x1E52, 0x1E53, 0x004F}, /* 1E52 */
2972 {0x1E54, 0x1E55, 0x0050}, {0x1E54, 0x1E55, 0x0050}, /* 1E54 */
2973 {0x1E56, 0x1E57, 0x0050}, {0x1E56, 0x1E57, 0x0050}, /* 1E56 */
2974 {0x1E58, 0x1E59, 0x0052}, {0x1E58, 0x1E59, 0x0052}, /* 1E58 */
2975 {0x1E5A, 0x1E5B, 0x0052}, {0x1E5A, 0x1E5B, 0x0052}, /* 1E5A */
2976 {0x1E5C, 0x1E5D, 0x0052}, {0x1E5C, 0x1E5D, 0x0052}, /* 1E5C */
2977 {0x1E5E, 0x1E5F, 0x0052}, {0x1E5E, 0x1E5F, 0x0052}, /* 1E5E */
2978 {0x1E60, 0x1E61, 0x0053}, {0x1E60, 0x1E61, 0x0053}, /* 1E60 */
2979 {0x1E62, 0x1E63, 0x0053}, {0x1E62, 0x1E63, 0x0053}, /* 1E62 */
2980 {0x1E64, 0x1E65, 0x0053}, {0x1E64, 0x1E65, 0x0053}, /* 1E64 */
2981 {0x1E66, 0x1E67, 0x0053}, {0x1E66, 0x1E67, 0x0053}, /* 1E66 */
2982 {0x1E68, 0x1E69, 0x0053}, {0x1E68, 0x1E69, 0x0053}, /* 1E68 */
2983 {0x1E6A, 0x1E6B, 0x0054}, {0x1E6A, 0x1E6B, 0x0054}, /* 1E6A */
2984 {0x1E6C, 0x1E6D, 0x0054}, {0x1E6C, 0x1E6D, 0x0054}, /* 1E6C */
2985 {0x1E6E, 0x1E6F, 0x0054}, {0x1E6E, 0x1E6F, 0x0054}, /* 1E6E */
2986 {0x1E70, 0x1E71, 0x0054}, {0x1E70, 0x1E71, 0x0054}, /* 1E70 */
2987 {0x1E72, 0x1E73, 0x0055}, {0x1E72, 0x1E73, 0x0055}, /* 1E72 */
2988 {0x1E74, 0x1E75, 0x0055}, {0x1E74, 0x1E75, 0x0055}, /* 1E74 */
2989 {0x1E76, 0x1E77, 0x0055}, {0x1E76, 0x1E77, 0x0055}, /* 1E76 */
2990 {0x1E78, 0x1E79, 0x0055}, {0x1E78, 0x1E79, 0x0055}, /* 1E78 */
2991 {0x1E7A, 0x1E7B, 0x0055}, {0x1E7A, 0x1E7B, 0x0055}, /* 1E7A */
2992 {0x1E7C, 0x1E7D, 0x0056}, {0x1E7C, 0x1E7D, 0x0056}, /* 1E7C */
2993 {0x1E7E, 0x1E7F, 0x0056}, {0x1E7E, 0x1E7F, 0x0056}, /* 1E7E */
2994 {0x1E80, 0x1E81, 0x0057}, {0x1E80, 0x1E81, 0x0057}, /* 1E80 */
2995 {0x1E82, 0x1E83, 0x0057}, {0x1E82, 0x1E83, 0x0057}, /* 1E82 */
2996 {0x1E84, 0x1E85, 0x0057}, {0x1E84, 0x1E85, 0x0057}, /* 1E84 */
2997 {0x1E86, 0x1E87, 0x0057}, {0x1E86, 0x1E87, 0x0057}, /* 1E86 */
2998 {0x1E88, 0x1E89, 0x0057}, {0x1E88, 0x1E89, 0x0057}, /* 1E88 */
2999 {0x1E8A, 0x1E8B, 0x0058}, {0x1E8A, 0x1E8B, 0x0058}, /* 1E8A */
3000 {0x1E8C, 0x1E8D, 0x0058}, {0x1E8C, 0x1E8D, 0x0058}, /* 1E8C */
3001 {0x1E8E, 0x1E8F, 0x0059}, {0x1E8E, 0x1E8F, 0x0059}, /* 1E8E */
3002 {0x1E90, 0x1E91, 0x005A}, {0x1E90, 0x1E91, 0x005A}, /* 1E90 */
3003 {0x1E92, 0x1E93, 0x005A}, {0x1E92, 0x1E93, 0x005A}, /* 1E92 */
3004 {0x1E94, 0x1E95, 0x005A}, {0x1E94, 0x1E95, 0x005A}, /* 1E94 */
3005 {0x1E96, 0x1E96, 0x0048}, {0x1E97, 0x1E97, 0x0054}, /* 1E96 */
3006 {0x1E98, 0x1E98, 0x0057}, {0x1E99, 0x1E99, 0x0059}, /* 1E98 */
3007 {0x1E9A, 0x1E9A, 0x1E9A}, {0x1E60, 0x1E9B, 0x0053}, /* 1E9A */
3008 {0x1E9C, 0x1E9C, 0x1E9C}, {0x1E9D, 0x1E9D, 0x1E9D}, /* 1E9C */
3009 {0x1E9E, 0x00DF, 0x1E9E}, {0x1E9F, 0x1E9F, 0x1E9F}, /* 1E9E */
3010 {0x1EA0, 0x1EA1, 0x0041}, {0x1EA0, 0x1EA1, 0x0041}, /* 1EA0 */
3011 {0x1EA2, 0x1EA3, 0x0041}, {0x1EA2, 0x1EA3, 0x0041}, /* 1EA2 */
3012 {0x1EA4, 0x1EA5, 0x0041}, {0x1EA4, 0x1EA5, 0x0041}, /* 1EA4 */
3013 {0x1EA6, 0x1EA7, 0x0041}, {0x1EA6, 0x1EA7, 0x0041}, /* 1EA6 */
3014 {0x1EA8, 0x1EA9, 0x0041}, {0x1EA8, 0x1EA9, 0x0041}, /* 1EA8 */
3015 {0x1EAA, 0x1EAB, 0x0041}, {0x1EAA, 0x1EAB, 0x0041}, /* 1EAA */
3016 {0x1EAC, 0x1EAD, 0x0041}, {0x1EAC, 0x1EAD, 0x0041}, /* 1EAC */
3017 {0x1EAE, 0x1EAF, 0x0041}, {0x1EAE, 0x1EAF, 0x0041}, /* 1EAE */
3018 {0x1EB0, 0x1EB1, 0x0041}, {0x1EB0, 0x1EB1, 0x0041}, /* 1EB0 */
3019 {0x1EB2, 0x1EB3, 0x0041}, {0x1EB2, 0x1EB3, 0x0041}, /* 1EB2 */
3020 {0x1EB4, 0x1EB5, 0x0041}, {0x1EB4, 0x1EB5, 0x0041}, /* 1EB4 */
3021 {0x1EB6, 0x1EB7, 0x0041}, {0x1EB6, 0x1EB7, 0x0041}, /* 1EB6 */
3022 {0x1EB8, 0x1EB9, 0x0045}, {0x1EB8, 0x1EB9, 0x0045}, /* 1EB8 */
3023 {0x1EBA, 0x1EBB, 0x0045}, {0x1EBA, 0x1EBB, 0x0045}, /* 1EBA */
3024 {0x1EBC, 0x1EBD, 0x0045}, {0x1EBC, 0x1EBD, 0x0045}, /* 1EBC */
3025 {0x1EBE, 0x1EBF, 0x0045}, {0x1EBE, 0x1EBF, 0x0045}, /* 1EBE */
3026 {0x1EC0, 0x1EC1, 0x0045}, {0x1EC0, 0x1EC1, 0x0045}, /* 1EC0 */
3027 {0x1EC2, 0x1EC3, 0x0045}, {0x1EC2, 0x1EC3, 0x0045}, /* 1EC2 */
3028 {0x1EC4, 0x1EC5, 0x0045}, {0x1EC4, 0x1EC5, 0x0045}, /* 1EC4 */
3029 {0x1EC6, 0x1EC7, 0x0045}, {0x1EC6, 0x1EC7, 0x0045}, /* 1EC6 */
3030 {0x1EC8, 0x1EC9, 0x0049}, {0x1EC8, 0x1EC9, 0x0049}, /* 1EC8 */
3031 {0x1ECA, 0x1ECB, 0x0049}, {0x1ECA, 0x1ECB, 0x0049}, /* 1ECA */
3032 {0x1ECC, 0x1ECD, 0x004F}, {0x1ECC, 0x1ECD, 0x004F}, /* 1ECC */
3033 {0x1ECE, 0x1ECF, 0x004F}, {0x1ECE, 0x1ECF, 0x004F}, /* 1ECE */
3034 {0x1ED0, 0x1ED1, 0x004F}, {0x1ED0, 0x1ED1, 0x004F}, /* 1ED0 */
3035 {0x1ED2, 0x1ED3, 0x004F}, {0x1ED2, 0x1ED3, 0x004F}, /* 1ED2 */
3036 {0x1ED4, 0x1ED5, 0x004F}, {0x1ED4, 0x1ED5, 0x004F}, /* 1ED4 */
3037 {0x1ED6, 0x1ED7, 0x004F}, {0x1ED6, 0x1ED7, 0x004F}, /* 1ED6 */
3038 {0x1ED8, 0x1ED9, 0x004F}, {0x1ED8, 0x1ED9, 0x004F}, /* 1ED8 */
3039 {0x1EDA, 0x1EDB, 0x004F}, {0x1EDA, 0x1EDB, 0x004F}, /* 1EDA */
3040 {0x1EDC, 0x1EDD, 0x004F}, {0x1EDC, 0x1EDD, 0x004F}, /* 1EDC */
3041 {0x1EDE, 0x1EDF, 0x004F}, {0x1EDE, 0x1EDF, 0x004F}, /* 1EDE */
3042 {0x1EE0, 0x1EE1, 0x004F}, {0x1EE0, 0x1EE1, 0x004F}, /* 1EE0 */
3043 {0x1EE2, 0x1EE3, 0x004F}, {0x1EE2, 0x1EE3, 0x004F}, /* 1EE2 */
3044 {0x1EE4, 0x1EE5, 0x0055}, {0x1EE4, 0x1EE5, 0x0055}, /* 1EE4 */
3045 {0x1EE6, 0x1EE7, 0x0055}, {0x1EE6, 0x1EE7, 0x0055}, /* 1EE6 */
3046 {0x1EE8, 0x1EE9, 0x0055}, {0x1EE8, 0x1EE9, 0x0055}, /* 1EE8 */
3047 {0x1EEA, 0x1EEB, 0x0055}, {0x1EEA, 0x1EEB, 0x0055}, /* 1EEA */
3048 {0x1EEC, 0x1EED, 0x0055}, {0x1EEC, 0x1EED, 0x0055}, /* 1EEC */
3049 {0x1EEE, 0x1EEF, 0x0055}, {0x1EEE, 0x1EEF, 0x0055}, /* 1EEE */
3050 {0x1EF0, 0x1EF1, 0x0055}, {0x1EF0, 0x1EF1, 0x0055}, /* 1EF0 */
3051 {0x1EF2, 0x1EF3, 0x0059}, {0x1EF2, 0x1EF3, 0x0059}, /* 1EF2 */
3052 {0x1EF4, 0x1EF5, 0x0059}, {0x1EF4, 0x1EF5, 0x0059}, /* 1EF4 */
3053 {0x1EF6, 0x1EF7, 0x0059}, {0x1EF6, 0x1EF7, 0x0059}, /* 1EF6 */
3054 {0x1EF8, 0x1EF9, 0x0059}, {0x1EF8, 0x1EF9, 0x0059}, /* 1EF8 */
3055 {0x1EFA, 0x1EFB, 0x1EFA}, {0x1EFA, 0x1EFB, 0x1EFA}, /* 1EFA */
3056 {0x1EFC, 0x1EFD, 0x1EFC}, {0x1EFC, 0x1EFD, 0x1EFC}, /* 1EFC */
3057 {0x1EFE, 0x1EFF, 0x1EFE}, {0x1EFE, 0x1EFF, 0x1EFE} /* 1EFE */
3058 };
3059
3060 static const MY_UNICASE_CHARACTER u520p1F[] = {
3061 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391}, /* 1F00 */
3062 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391}, /* 1F02 */
3063 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391}, /* 1F04 */
3064 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391}, /* 1F06 */
3065 {0x1F08, 0x1F00, 0x0391}, {0x1F09, 0x1F01, 0x0391}, /* 1F08 */
3066 {0x1F0A, 0x1F02, 0x0391}, {0x1F0B, 0x1F03, 0x0391}, /* 1F0A */
3067 {0x1F0C, 0x1F04, 0x0391}, {0x1F0D, 0x1F05, 0x0391}, /* 1F0C */
3068 {0x1F0E, 0x1F06, 0x0391}, {0x1F0F, 0x1F07, 0x0391}, /* 1F0E */
3069 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395}, /* 1F10 */
3070 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395}, /* 1F12 */
3071 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395}, /* 1F14 */
3072 {0x1F16, 0x1F16, 0x1F16}, {0x1F17, 0x1F17, 0x1F17}, /* 1F16 */
3073 {0x1F18, 0x1F10, 0x0395}, {0x1F19, 0x1F11, 0x0395}, /* 1F18 */
3074 {0x1F1A, 0x1F12, 0x0395}, {0x1F1B, 0x1F13, 0x0395}, /* 1F1A */
3075 {0x1F1C, 0x1F14, 0x0395}, {0x1F1D, 0x1F15, 0x0395}, /* 1F1C */
3076 {0x1F1E, 0x1F1E, 0x1F1E}, {0x1F1F, 0x1F1F, 0x1F1F}, /* 1F1E */
3077 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397}, /* 1F20 */
3078 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397}, /* 1F22 */
3079 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397}, /* 1F24 */
3080 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397}, /* 1F26 */
3081 {0x1F28, 0x1F20, 0x0397}, {0x1F29, 0x1F21, 0x0397}, /* 1F28 */
3082 {0x1F2A, 0x1F22, 0x0397}, {0x1F2B, 0x1F23, 0x0397}, /* 1F2A */
3083 {0x1F2C, 0x1F24, 0x0397}, {0x1F2D, 0x1F25, 0x0397}, /* 1F2C */
3084 {0x1F2E, 0x1F26, 0x0397}, {0x1F2F, 0x1F27, 0x0397}, /* 1F2E */
3085 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399}, /* 1F30 */
3086 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399}, /* 1F32 */
3087 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399}, /* 1F34 */
3088 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399}, /* 1F36 */
3089 {0x1F38, 0x1F30, 0x0399}, {0x1F39, 0x1F31, 0x0399}, /* 1F38 */
3090 {0x1F3A, 0x1F32, 0x0399}, {0x1F3B, 0x1F33, 0x0399}, /* 1F3A */
3091 {0x1F3C, 0x1F34, 0x0399}, {0x1F3D, 0x1F35, 0x0399}, /* 1F3C */
3092 {0x1F3E, 0x1F36, 0x0399}, {0x1F3F, 0x1F37, 0x0399}, /* 1F3E */
3093 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F}, /* 1F40 */
3094 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F}, /* 1F42 */
3095 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F}, /* 1F44 */
3096 {0x1F46, 0x1F46, 0x1F46}, {0x1F47, 0x1F47, 0x1F47}, /* 1F46 */
3097 {0x1F48, 0x1F40, 0x039F}, {0x1F49, 0x1F41, 0x039F}, /* 1F48 */
3098 {0x1F4A, 0x1F42, 0x039F}, {0x1F4B, 0x1F43, 0x039F}, /* 1F4A */
3099 {0x1F4C, 0x1F44, 0x039F}, {0x1F4D, 0x1F45, 0x039F}, /* 1F4C */
3100 {0x1F4E, 0x1F4E, 0x1F4E}, {0x1F4F, 0x1F4F, 0x1F4F}, /* 1F4E */
3101 {0x1F50, 0x1F50, 0x03A5}, {0x1F59, 0x1F51, 0x03A5}, /* 1F50 */
3102 {0x1F52, 0x1F52, 0x03A5}, {0x1F5B, 0x1F53, 0x03A5}, /* 1F52 */
3103 {0x1F54, 0x1F54, 0x03A5}, {0x1F5D, 0x1F55, 0x03A5}, /* 1F54 */
3104 {0x1F56, 0x1F56, 0x03A5}, {0x1F5F, 0x1F57, 0x03A5}, /* 1F56 */
3105 {0x1F58, 0x1F58, 0x1F58}, {0x1F59, 0x1F51, 0x03A5}, /* 1F58 */
3106 {0x1F5A, 0x1F5A, 0x1F5A}, {0x1F5B, 0x1F53, 0x03A5}, /* 1F5A */
3107 {0x1F5C, 0x1F5C, 0x1F5C}, {0x1F5D, 0x1F55, 0x03A5}, /* 1F5C */
3108 {0x1F5E, 0x1F5E, 0x1F5E}, {0x1F5F, 0x1F57, 0x03A5}, /* 1F5E */
3109 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9}, /* 1F60 */
3110 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9}, /* 1F62 */
3111 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9}, /* 1F64 */
3112 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9}, /* 1F66 */
3113 {0x1F68, 0x1F60, 0x03A9}, {0x1F69, 0x1F61, 0x03A9}, /* 1F68 */
3114 {0x1F6A, 0x1F62, 0x03A9}, {0x1F6B, 0x1F63, 0x03A9}, /* 1F6A */
3115 {0x1F6C, 0x1F64, 0x03A9}, {0x1F6D, 0x1F65, 0x03A9}, /* 1F6C */
3116 {0x1F6E, 0x1F66, 0x03A9}, {0x1F6F, 0x1F67, 0x03A9}, /* 1F6E */
3117 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB}, /* 1F70 */
3118 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9}, /* 1F72 */
3119 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB}, /* 1F74 */
3120 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB}, /* 1F76 */
3121 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9}, /* 1F78 */
3122 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB}, /* 1F7A */
3123 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB}, /* 1F7C */
3124 {0x1F7E, 0x1F7E, 0x1F7E}, {0x1F7F, 0x1F7F, 0x1F7F}, /* 1F7E */
3125 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391}, /* 1F80 */
3126 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391}, /* 1F82 */
3127 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391}, /* 1F84 */
3128 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391}, /* 1F86 */
3129 {0x1F88, 0x1F80, 0x0391}, {0x1F89, 0x1F81, 0x0391}, /* 1F88 */
3130 {0x1F8A, 0x1F82, 0x0391}, {0x1F8B, 0x1F83, 0x0391}, /* 1F8A */
3131 {0x1F8C, 0x1F84, 0x0391}, {0x1F8D, 0x1F85, 0x0391}, /* 1F8C */
3132 {0x1F8E, 0x1F86, 0x0391}, {0x1F8F, 0x1F87, 0x0391}, /* 1F8E */
3133 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397}, /* 1F90 */
3134 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397}, /* 1F92 */
3135 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397}, /* 1F94 */
3136 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397}, /* 1F96 */
3137 {0x1F98, 0x1F90, 0x0397}, {0x1F99, 0x1F91, 0x0397}, /* 1F98 */
3138 {0x1F9A, 0x1F92, 0x0397}, {0x1F9B, 0x1F93, 0x0397}, /* 1F9A */
3139 {0x1F9C, 0x1F94, 0x0397}, {0x1F9D, 0x1F95, 0x0397}, /* 1F9C */
3140 {0x1F9E, 0x1F96, 0x0397}, {0x1F9F, 0x1F97, 0x0397}, /* 1F9E */
3141 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9}, /* 1FA0 */
3142 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9}, /* 1FA2 */
3143 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9}, /* 1FA4 */
3144 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9}, /* 1FA6 */
3145 {0x1FA8, 0x1FA0, 0x03A9}, {0x1FA9, 0x1FA1, 0x03A9}, /* 1FA8 */
3146 {0x1FAA, 0x1FA2, 0x03A9}, {0x1FAB, 0x1FA3, 0x03A9}, /* 1FAA */
3147 {0x1FAC, 0x1FA4, 0x03A9}, {0x1FAD, 0x1FA5, 0x03A9}, /* 1FAC */
3148 {0x1FAE, 0x1FA6, 0x03A9}, {0x1FAF, 0x1FA7, 0x03A9}, /* 1FAE */
3149 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391}, /* 1FB0 */
3150 {0x1FB2, 0x1FB2, 0x0391}, {0x1FBC, 0x1FB3, 0x0391}, /* 1FB2 */
3151 {0x1FB4, 0x1FB4, 0x0391}, {0x1FB5, 0x1FB5, 0x1FB5}, /* 1FB4 */
3152 {0x1FB6, 0x1FB6, 0x0391}, {0x1FB7, 0x1FB7, 0x0391}, /* 1FB6 */
3153 {0x1FB8, 0x1FB0, 0x0391}, {0x1FB9, 0x1FB1, 0x0391}, /* 1FB8 */
3154 {0x1FBA, 0x1F70, 0x0391}, {0x1FBB, 0x1F71, 0x1FBB}, /* 1FBA */
3155 {0x1FBC, 0x1FB3, 0x0391}, {0x1FBD, 0x1FBD, 0x1FBD}, /* 1FBC */
3156 {0x0399, 0x1FBE, 0x0399}, {0x1FBF, 0x1FBF, 0x1FBF}, /* 1FBE */
3157 {0x1FC0, 0x1FC0, 0x1FC0}, {0x1FC1, 0x1FC1, 0x1FC1}, /* 1FC0 */
3158 {0x1FC2, 0x1FC2, 0x0397}, {0x1FCC, 0x1FC3, 0x0397}, /* 1FC2 */
3159 {0x1FC4, 0x1FC4, 0x0397}, {0x1FC5, 0x1FC5, 0x1FC5}, /* 1FC4 */
3160 {0x1FC6, 0x1FC6, 0x0397}, {0x1FC7, 0x1FC7, 0x0397}, /* 1FC6 */
3161 {0x1FC8, 0x1F72, 0x0395}, {0x1FC9, 0x1F73, 0x1FC9}, /* 1FC8 */
3162 {0x1FCA, 0x1F74, 0x0397}, {0x1FCB, 0x1F75, 0x1FCB}, /* 1FCA */
3163 {0x1FCC, 0x1FC3, 0x0397}, {0x1FCD, 0x1FCD, 0x1FCD}, /* 1FCC */
3164 {0x1FCE, 0x1FCE, 0x1FCE}, {0x1FCF, 0x1FCF, 0x1FCF}, /* 1FCE */
3165 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399}, /* 1FD0 */
3166 {0x1FD2, 0x1FD2, 0x0399}, {0x1FD3, 0x1FD3, 0x1FD3}, /* 1FD2 */
3167 {0x1FD4, 0x1FD4, 0x1FD4}, {0x1FD5, 0x1FD5, 0x1FD5}, /* 1FD4 */
3168 {0x1FD6, 0x1FD6, 0x0399}, {0x1FD7, 0x1FD7, 0x0399}, /* 1FD6 */
3169 {0x1FD8, 0x1FD0, 0x0399}, {0x1FD9, 0x1FD1, 0x0399}, /* 1FD8 */
3170 {0x1FDA, 0x1F76, 0x0399}, {0x1FDB, 0x1F77, 0x1FDB}, /* 1FDA */
3171 {0x1FDC, 0x1FDC, 0x1FDC}, {0x1FDD, 0x1FDD, 0x1FDD}, /* 1FDC */
3172 {0x1FDE, 0x1FDE, 0x1FDE}, {0x1FDF, 0x1FDF, 0x1FDF}, /* 1FDE */
3173 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5}, /* 1FE0 */
3174 {0x1FE2, 0x1FE2, 0x03A5}, {0x1FE3, 0x1FE3, 0x1FE3}, /* 1FE2 */
3175 {0x1FE4, 0x1FE4, 0x03A1}, {0x1FEC, 0x1FE5, 0x03A1}, /* 1FE4 */
3176 {0x1FE6, 0x1FE6, 0x03A5}, {0x1FE7, 0x1FE7, 0x03A5}, /* 1FE6 */
3177 {0x1FE8, 0x1FE0, 0x03A5}, {0x1FE9, 0x1FE1, 0x03A5}, /* 1FE8 */
3178 {0x1FEA, 0x1F7A, 0x03A5}, {0x1FEB, 0x1F7B, 0x1FEB}, /* 1FEA */
3179 {0x1FEC, 0x1FE5, 0x03A1}, {0x1FED, 0x1FED, 0x1FED}, /* 1FEC */
3180 {0x1FEE, 0x1FEE, 0x1FEE}, {0x1FEF, 0x1FEF, 0x1FEF}, /* 1FEE */
3181 {0x1FF0, 0x1FF0, 0x1FF0}, {0x1FF1, 0x1FF1, 0x1FF1}, /* 1FF0 */
3182 {0x1FF2, 0x1FF2, 0x03A9}, {0x1FFC, 0x1FF3, 0x03A9}, /* 1FF2 */
3183 {0x1FF4, 0x1FF4, 0x03A9}, {0x1FF5, 0x1FF5, 0x1FF5}, /* 1FF4 */
3184 {0x1FF6, 0x1FF6, 0x03A9}, {0x1FF7, 0x1FF7, 0x03A9}, /* 1FF6 */
3185 {0x1FF8, 0x1F78, 0x039F}, {0x1FF9, 0x1F79, 0x1FF9}, /* 1FF8 */
3186 {0x1FFA, 0x1F7C, 0x03A9}, {0x1FFB, 0x1F7D, 0x1FFB}, /* 1FFA */
3187 {0x1FFC, 0x1FF3, 0x03A9}, {0x1FFD, 0x1FFD, 0x1FFD}, /* 1FFC */
3188 {0x1FFE, 0x1FFE, 0x1FFE}, {0x1FFF, 0x1FFF, 0x1FFF} /* 1FFE */
3189 };
3190
3191 static const MY_UNICASE_CHARACTER u520p21[] = {
3192 {0x2100, 0x2100, 0x2100}, {0x2101, 0x2101, 0x2101}, /* 2100 */
3193 {0x2102, 0x2102, 0x2102}, {0x2103, 0x2103, 0x2103}, /* 2102 */
3194 {0x2104, 0x2104, 0x2104}, {0x2105, 0x2105, 0x2105}, /* 2104 */
3195 {0x2106, 0x2106, 0x2106}, {0x2107, 0x2107, 0x2107}, /* 2106 */
3196 {0x2108, 0x2108, 0x2108}, {0x2109, 0x2109, 0x2109}, /* 2108 */
3197 {0x210A, 0x210A, 0x210A}, {0x210B, 0x210B, 0x210B}, /* 210A */
3198 {0x210C, 0x210C, 0x210C}, {0x210D, 0x210D, 0x210D}, /* 210C */
3199 {0x210E, 0x210E, 0x210E}, {0x210F, 0x210F, 0x210F}, /* 210E */
3200 {0x2110, 0x2110, 0x2110}, {0x2111, 0x2111, 0x2111}, /* 2110 */
3201 {0x2112, 0x2112, 0x2112}, {0x2113, 0x2113, 0x2113}, /* 2112 */
3202 {0x2114, 0x2114, 0x2114}, {0x2115, 0x2115, 0x2115}, /* 2114 */
3203 {0x2116, 0x2116, 0x2116}, {0x2117, 0x2117, 0x2117}, /* 2116 */
3204 {0x2118, 0x2118, 0x2118}, {0x2119, 0x2119, 0x2119}, /* 2118 */
3205 {0x211A, 0x211A, 0x211A}, {0x211B, 0x211B, 0x211B}, /* 211A */
3206 {0x211C, 0x211C, 0x211C}, {0x211D, 0x211D, 0x211D}, /* 211C */
3207 {0x211E, 0x211E, 0x211E}, {0x211F, 0x211F, 0x211F}, /* 211E */
3208 {0x2120, 0x2120, 0x2120}, {0x2121, 0x2121, 0x2121}, /* 2120 */
3209 {0x2122, 0x2122, 0x2122}, {0x2123, 0x2123, 0x2123}, /* 2122 */
3210 {0x2124, 0x2124, 0x2124}, {0x2125, 0x2125, 0x2125}, /* 2124 */
3211 {0x2126, 0x03C9, 0x2126}, {0x2127, 0x2127, 0x2127}, /* 2126 */
3212 {0x2128, 0x2128, 0x2128}, {0x2129, 0x2129, 0x2129}, /* 2128 */
3213 {0x212A, 0x006B, 0x212A}, {0x212B, 0x00E5, 0x212B}, /* 212A */
3214 {0x212C, 0x212C, 0x212C}, {0x212D, 0x212D, 0x212D}, /* 212C */
3215 {0x212E, 0x212E, 0x212E}, {0x212F, 0x212F, 0x212F}, /* 212E */
3216 {0x2130, 0x2130, 0x2130}, {0x2131, 0x2131, 0x2131}, /* 2130 */
3217 {0x2132, 0x214E, 0x2132}, {0x2133, 0x2133, 0x2133}, /* 2132 */
3218 {0x2134, 0x2134, 0x2134}, {0x2135, 0x2135, 0x2135}, /* 2134 */
3219 {0x2136, 0x2136, 0x2136}, {0x2137, 0x2137, 0x2137}, /* 2136 */
3220 {0x2138, 0x2138, 0x2138}, {0x2139, 0x2139, 0x2139}, /* 2138 */
3221 {0x213A, 0x213A, 0x213A}, {0x213B, 0x213B, 0x213B}, /* 213A */
3222 {0x213C, 0x213C, 0x213C}, {0x213D, 0x213D, 0x213D}, /* 213C */
3223 {0x213E, 0x213E, 0x213E}, {0x213F, 0x213F, 0x213F}, /* 213E */
3224 {0x2140, 0x2140, 0x2140}, {0x2141, 0x2141, 0x2141}, /* 2140 */
3225 {0x2142, 0x2142, 0x2142}, {0x2143, 0x2143, 0x2143}, /* 2142 */
3226 {0x2144, 0x2144, 0x2144}, {0x2145, 0x2145, 0x2145}, /* 2144 */
3227 {0x2146, 0x2146, 0x2146}, {0x2147, 0x2147, 0x2147}, /* 2146 */
3228 {0x2148, 0x2148, 0x2148}, {0x2149, 0x2149, 0x2149}, /* 2148 */
3229 {0x214A, 0x214A, 0x214A}, {0x214B, 0x214B, 0x214B}, /* 214A */
3230 {0x214C, 0x214C, 0x214C}, {0x214D, 0x214D, 0x214D}, /* 214C */
3231 {0x2132, 0x214E, 0x2132}, {0x214F, 0x214F, 0x214F}, /* 214E */
3232 {0x2150, 0x2150, 0x2150}, {0x2151, 0x2151, 0x2151}, /* 2150 */
3233 {0x2152, 0x2152, 0x2152}, {0x2153, 0x2153, 0x2153}, /* 2152 */
3234 {0x2154, 0x2154, 0x2154}, {0x2155, 0x2155, 0x2155}, /* 2154 */
3235 {0x2156, 0x2156, 0x2156}, {0x2157, 0x2157, 0x2157}, /* 2156 */
3236 {0x2158, 0x2158, 0x2158}, {0x2159, 0x2159, 0x2159}, /* 2158 */
3237 {0x215A, 0x215A, 0x215A}, {0x215B, 0x215B, 0x215B}, /* 215A */
3238 {0x215C, 0x215C, 0x215C}, {0x215D, 0x215D, 0x215D}, /* 215C */
3239 {0x215E, 0x215E, 0x215E}, {0x215F, 0x215F, 0x215F}, /* 215E */
3240 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161}, /* 2160 */
3241 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163}, /* 2162 */
3242 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165}, /* 2164 */
3243 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167}, /* 2166 */
3244 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169}, /* 2168 */
3245 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B}, /* 216A */
3246 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D}, /* 216C */
3247 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F}, /* 216E */
3248 {0x2160, 0x2170, 0x2160}, {0x2161, 0x2171, 0x2161}, /* 2170 */
3249 {0x2162, 0x2172, 0x2162}, {0x2163, 0x2173, 0x2163}, /* 2172 */
3250 {0x2164, 0x2174, 0x2164}, {0x2165, 0x2175, 0x2165}, /* 2174 */
3251 {0x2166, 0x2176, 0x2166}, {0x2167, 0x2177, 0x2167}, /* 2176 */
3252 {0x2168, 0x2178, 0x2168}, {0x2169, 0x2179, 0x2169}, /* 2178 */
3253 {0x216A, 0x217A, 0x216A}, {0x216B, 0x217B, 0x216B}, /* 217A */
3254 {0x216C, 0x217C, 0x216C}, {0x216D, 0x217D, 0x216D}, /* 217C */
3255 {0x216E, 0x217E, 0x216E}, {0x216F, 0x217F, 0x216F}, /* 217E */
3256 {0x2180, 0x2180, 0x2180}, {0x2181, 0x2181, 0x2181}, /* 2180 */
3257 {0x2182, 0x2182, 0x2182}, {0x2183, 0x2184, 0x2183}, /* 2182 */
3258 {0x2183, 0x2184, 0x2183}, {0x2185, 0x2185, 0x2185}, /* 2184 */
3259 {0x2186, 0x2186, 0x2186}, {0x2187, 0x2187, 0x2187}, /* 2186 */
3260 {0x2188, 0x2188, 0x2188}, {0x2189, 0x2189, 0x2189}, /* 2188 */
3261 {0x218A, 0x218A, 0x218A}, {0x218B, 0x218B, 0x218B}, /* 218A */
3262 {0x218C, 0x218C, 0x218C}, {0x218D, 0x218D, 0x218D}, /* 218C */
3263 {0x218E, 0x218E, 0x218E}, {0x218F, 0x218F, 0x218F}, /* 218E */
3264 {0x2190, 0x2190, 0x2190}, {0x2191, 0x2191, 0x2191}, /* 2190 */
3265 {0x2192, 0x2192, 0x2192}, {0x2193, 0x2193, 0x2193}, /* 2192 */
3266 {0x2194, 0x2194, 0x2194}, {0x2195, 0x2195, 0x2195}, /* 2194 */
3267 {0x2196, 0x2196, 0x2196}, {0x2197, 0x2197, 0x2197}, /* 2196 */
3268 {0x2198, 0x2198, 0x2198}, {0x2199, 0x2199, 0x2199}, /* 2198 */
3269 {0x219A, 0x219A, 0x219A}, {0x219B, 0x219B, 0x219B}, /* 219A */
3270 {0x219C, 0x219C, 0x219C}, {0x219D, 0x219D, 0x219D}, /* 219C */
3271 {0x219E, 0x219E, 0x219E}, {0x219F, 0x219F, 0x219F}, /* 219E */
3272 {0x21A0, 0x21A0, 0x21A0}, {0x21A1, 0x21A1, 0x21A1}, /* 21A0 */
3273 {0x21A2, 0x21A2, 0x21A2}, {0x21A3, 0x21A3, 0x21A3}, /* 21A2 */
3274 {0x21A4, 0x21A4, 0x21A4}, {0x21A5, 0x21A5, 0x21A5}, /* 21A4 */
3275 {0x21A6, 0x21A6, 0x21A6}, {0x21A7, 0x21A7, 0x21A7}, /* 21A6 */
3276 {0x21A8, 0x21A8, 0x21A8}, {0x21A9, 0x21A9, 0x21A9}, /* 21A8 */
3277 {0x21AA, 0x21AA, 0x21AA}, {0x21AB, 0x21AB, 0x21AB}, /* 21AA */
3278 {0x21AC, 0x21AC, 0x21AC}, {0x21AD, 0x21AD, 0x21AD}, /* 21AC */
3279 {0x21AE, 0x21AE, 0x21AE}, {0x21AF, 0x21AF, 0x21AF}, /* 21AE */
3280 {0x21B0, 0x21B0, 0x21B0}, {0x21B1, 0x21B1, 0x21B1}, /* 21B0 */
3281 {0x21B2, 0x21B2, 0x21B2}, {0x21B3, 0x21B3, 0x21B3}, /* 21B2 */
3282 {0x21B4, 0x21B4, 0x21B4}, {0x21B5, 0x21B5, 0x21B5}, /* 21B4 */
3283 {0x21B6, 0x21B6, 0x21B6}, {0x21B7, 0x21B7, 0x21B7}, /* 21B6 */
3284 {0x21B8, 0x21B8, 0x21B8}, {0x21B9, 0x21B9, 0x21B9}, /* 21B8 */
3285 {0x21BA, 0x21BA, 0x21BA}, {0x21BB, 0x21BB, 0x21BB}, /* 21BA */
3286 {0x21BC, 0x21BC, 0x21BC}, {0x21BD, 0x21BD, 0x21BD}, /* 21BC */
3287 {0x21BE, 0x21BE, 0x21BE}, {0x21BF, 0x21BF, 0x21BF}, /* 21BE */
3288 {0x21C0, 0x21C0, 0x21C0}, {0x21C1, 0x21C1, 0x21C1}, /* 21C0 */
3289 {0x21C2, 0x21C2, 0x21C2}, {0x21C3, 0x21C3, 0x21C3}, /* 21C2 */
3290 {0x21C4, 0x21C4, 0x21C4}, {0x21C5, 0x21C5, 0x21C5}, /* 21C4 */
3291 {0x21C6, 0x21C6, 0x21C6}, {0x21C7, 0x21C7, 0x21C7}, /* 21C6 */
3292 {0x21C8, 0x21C8, 0x21C8}, {0x21C9, 0x21C9, 0x21C9}, /* 21C8 */
3293 {0x21CA, 0x21CA, 0x21CA}, {0x21CB, 0x21CB, 0x21CB}, /* 21CA */
3294 {0x21CC, 0x21CC, 0x21CC}, {0x21CD, 0x21CD, 0x21CD}, /* 21CC */
3295 {0x21CE, 0x21CE, 0x21CE}, {0x21CF, 0x21CF, 0x21CF}, /* 21CE */
3296 {0x21D0, 0x21D0, 0x21D0}, {0x21D1, 0x21D1, 0x21D1}, /* 21D0 */
3297 {0x21D2, 0x21D2, 0x21D2}, {0x21D3, 0x21D3, 0x21D3}, /* 21D2 */
3298 {0x21D4, 0x21D4, 0x21D4}, {0x21D5, 0x21D5, 0x21D5}, /* 21D4 */
3299 {0x21D6, 0x21D6, 0x21D6}, {0x21D7, 0x21D7, 0x21D7}, /* 21D6 */
3300 {0x21D8, 0x21D8, 0x21D8}, {0x21D9, 0x21D9, 0x21D9}, /* 21D8 */
3301 {0x21DA, 0x21DA, 0x21DA}, {0x21DB, 0x21DB, 0x21DB}, /* 21DA */
3302 {0x21DC, 0x21DC, 0x21DC}, {0x21DD, 0x21DD, 0x21DD}, /* 21DC */
3303 {0x21DE, 0x21DE, 0x21DE}, {0x21DF, 0x21DF, 0x21DF}, /* 21DE */
3304 {0x21E0, 0x21E0, 0x21E0}, {0x21E1, 0x21E1, 0x21E1}, /* 21E0 */
3305 {0x21E2, 0x21E2, 0x21E2}, {0x21E3, 0x21E3, 0x21E3}, /* 21E2 */
3306 {0x21E4, 0x21E4, 0x21E4}, {0x21E5, 0x21E5, 0x21E5}, /* 21E4 */
3307 {0x21E6, 0x21E6, 0x21E6}, {0x21E7, 0x21E7, 0x21E7}, /* 21E6 */
3308 {0x21E8, 0x21E8, 0x21E8}, {0x21E9, 0x21E9, 0x21E9}, /* 21E8 */
3309 {0x21EA, 0x21EA, 0x21EA}, {0x21EB, 0x21EB, 0x21EB}, /* 21EA */
3310 {0x21EC, 0x21EC, 0x21EC}, {0x21ED, 0x21ED, 0x21ED}, /* 21EC */
3311 {0x21EE, 0x21EE, 0x21EE}, {0x21EF, 0x21EF, 0x21EF}, /* 21EE */
3312 {0x21F0, 0x21F0, 0x21F0}, {0x21F1, 0x21F1, 0x21F1}, /* 21F0 */
3313 {0x21F2, 0x21F2, 0x21F2}, {0x21F3, 0x21F3, 0x21F3}, /* 21F2 */
3314 {0x21F4, 0x21F4, 0x21F4}, {0x21F5, 0x21F5, 0x21F5}, /* 21F4 */
3315 {0x21F6, 0x21F6, 0x21F6}, {0x21F7, 0x21F7, 0x21F7}, /* 21F6 */
3316 {0x21F8, 0x21F8, 0x21F8}, {0x21F9, 0x21F9, 0x21F9}, /* 21F8 */
3317 {0x21FA, 0x21FA, 0x21FA}, {0x21FB, 0x21FB, 0x21FB}, /* 21FA */
3318 {0x21FC, 0x21FC, 0x21FC}, {0x21FD, 0x21FD, 0x21FD}, /* 21FC */
3319 {0x21FE, 0x21FE, 0x21FE}, {0x21FF, 0x21FF, 0x21FF} /* 21FE */
3320 };
3321
3322 static const MY_UNICASE_CHARACTER u520p24[] = {
3323 {0x2400, 0x2400, 0x2400}, {0x2401, 0x2401, 0x2401}, /* 2400 */
3324 {0x2402, 0x2402, 0x2402}, {0x2403, 0x2403, 0x2403}, /* 2402 */
3325 {0x2404, 0x2404, 0x2404}, {0x2405, 0x2405, 0x2405}, /* 2404 */
3326 {0x2406, 0x2406, 0x2406}, {0x2407, 0x2407, 0x2407}, /* 2406 */
3327 {0x2408, 0x2408, 0x2408}, {0x2409, 0x2409, 0x2409}, /* 2408 */
3328 {0x240A, 0x240A, 0x240A}, {0x240B, 0x240B, 0x240B}, /* 240A */
3329 {0x240C, 0x240C, 0x240C}, {0x240D, 0x240D, 0x240D}, /* 240C */
3330 {0x240E, 0x240E, 0x240E}, {0x240F, 0x240F, 0x240F}, /* 240E */
3331 {0x2410, 0x2410, 0x2410}, {0x2411, 0x2411, 0x2411}, /* 2410 */
3332 {0x2412, 0x2412, 0x2412}, {0x2413, 0x2413, 0x2413}, /* 2412 */
3333 {0x2414, 0x2414, 0x2414}, {0x2415, 0x2415, 0x2415}, /* 2414 */
3334 {0x2416, 0x2416, 0x2416}, {0x2417, 0x2417, 0x2417}, /* 2416 */
3335 {0x2418, 0x2418, 0x2418}, {0x2419, 0x2419, 0x2419}, /* 2418 */
3336 {0x241A, 0x241A, 0x241A}, {0x241B, 0x241B, 0x241B}, /* 241A */
3337 {0x241C, 0x241C, 0x241C}, {0x241D, 0x241D, 0x241D}, /* 241C */
3338 {0x241E, 0x241E, 0x241E}, {0x241F, 0x241F, 0x241F}, /* 241E */
3339 {0x2420, 0x2420, 0x2420}, {0x2421, 0x2421, 0x2421}, /* 2420 */
3340 {0x2422, 0x2422, 0x2422}, {0x2423, 0x2423, 0x2423}, /* 2422 */
3341 {0x2424, 0x2424, 0x2424}, {0x2425, 0x2425, 0x2425}, /* 2424 */
3342 {0x2426, 0x2426, 0x2426}, {0x2427, 0x2427, 0x2427}, /* 2426 */
3343 {0x2428, 0x2428, 0x2428}, {0x2429, 0x2429, 0x2429}, /* 2428 */
3344 {0x242A, 0x242A, 0x242A}, {0x242B, 0x242B, 0x242B}, /* 242A */
3345 {0x242C, 0x242C, 0x242C}, {0x242D, 0x242D, 0x242D}, /* 242C */
3346 {0x242E, 0x242E, 0x242E}, {0x242F, 0x242F, 0x242F}, /* 242E */
3347 {0x2430, 0x2430, 0x2430}, {0x2431, 0x2431, 0x2431}, /* 2430 */
3348 {0x2432, 0x2432, 0x2432}, {0x2433, 0x2433, 0x2433}, /* 2432 */
3349 {0x2434, 0x2434, 0x2434}, {0x2435, 0x2435, 0x2435}, /* 2434 */
3350 {0x2436, 0x2436, 0x2436}, {0x2437, 0x2437, 0x2437}, /* 2436 */
3351 {0x2438, 0x2438, 0x2438}, {0x2439, 0x2439, 0x2439}, /* 2438 */
3352 {0x243A, 0x243A, 0x243A}, {0x243B, 0x243B, 0x243B}, /* 243A */
3353 {0x243C, 0x243C, 0x243C}, {0x243D, 0x243D, 0x243D}, /* 243C */
3354 {0x243E, 0x243E, 0x243E}, {0x243F, 0x243F, 0x243F}, /* 243E */
3355 {0x2440, 0x2440, 0x2440}, {0x2441, 0x2441, 0x2441}, /* 2440 */
3356 {0x2442, 0x2442, 0x2442}, {0x2443, 0x2443, 0x2443}, /* 2442 */
3357 {0x2444, 0x2444, 0x2444}, {0x2445, 0x2445, 0x2445}, /* 2444 */
3358 {0x2446, 0x2446, 0x2446}, {0x2447, 0x2447, 0x2447}, /* 2446 */
3359 {0x2448, 0x2448, 0x2448}, {0x2449, 0x2449, 0x2449}, /* 2448 */
3360 {0x244A, 0x244A, 0x244A}, {0x244B, 0x244B, 0x244B}, /* 244A */
3361 {0x244C, 0x244C, 0x244C}, {0x244D, 0x244D, 0x244D}, /* 244C */
3362 {0x244E, 0x244E, 0x244E}, {0x244F, 0x244F, 0x244F}, /* 244E */
3363 {0x2450, 0x2450, 0x2450}, {0x2451, 0x2451, 0x2451}, /* 2450 */
3364 {0x2452, 0x2452, 0x2452}, {0x2453, 0x2453, 0x2453}, /* 2452 */
3365 {0x2454, 0x2454, 0x2454}, {0x2455, 0x2455, 0x2455}, /* 2454 */
3366 {0x2456, 0x2456, 0x2456}, {0x2457, 0x2457, 0x2457}, /* 2456 */
3367 {0x2458, 0x2458, 0x2458}, {0x2459, 0x2459, 0x2459}, /* 2458 */
3368 {0x245A, 0x245A, 0x245A}, {0x245B, 0x245B, 0x245B}, /* 245A */
3369 {0x245C, 0x245C, 0x245C}, {0x245D, 0x245D, 0x245D}, /* 245C */
3370 {0x245E, 0x245E, 0x245E}, {0x245F, 0x245F, 0x245F}, /* 245E */
3371 {0x2460, 0x2460, 0x2460}, {0x2461, 0x2461, 0x2461}, /* 2460 */
3372 {0x2462, 0x2462, 0x2462}, {0x2463, 0x2463, 0x2463}, /* 2462 */
3373 {0x2464, 0x2464, 0x2464}, {0x2465, 0x2465, 0x2465}, /* 2464 */
3374 {0x2466, 0x2466, 0x2466}, {0x2467, 0x2467, 0x2467}, /* 2466 */
3375 {0x2468, 0x2468, 0x2468}, {0x2469, 0x2469, 0x2469}, /* 2468 */
3376 {0x246A, 0x246A, 0x246A}, {0x246B, 0x246B, 0x246B}, /* 246A */
3377 {0x246C, 0x246C, 0x246C}, {0x246D, 0x246D, 0x246D}, /* 246C */
3378 {0x246E, 0x246E, 0x246E}, {0x246F, 0x246F, 0x246F}, /* 246E */
3379 {0x2470, 0x2470, 0x2470}, {0x2471, 0x2471, 0x2471}, /* 2470 */
3380 {0x2472, 0x2472, 0x2472}, {0x2473, 0x2473, 0x2473}, /* 2472 */
3381 {0x2474, 0x2474, 0x2474}, {0x2475, 0x2475, 0x2475}, /* 2474 */
3382 {0x2476, 0x2476, 0x2476}, {0x2477, 0x2477, 0x2477}, /* 2476 */
3383 {0x2478, 0x2478, 0x2478}, {0x2479, 0x2479, 0x2479}, /* 2478 */
3384 {0x247A, 0x247A, 0x247A}, {0x247B, 0x247B, 0x247B}, /* 247A */
3385 {0x247C, 0x247C, 0x247C}, {0x247D, 0x247D, 0x247D}, /* 247C */
3386 {0x247E, 0x247E, 0x247E}, {0x247F, 0x247F, 0x247F}, /* 247E */
3387 {0x2480, 0x2480, 0x2480}, {0x2481, 0x2481, 0x2481}, /* 2480 */
3388 {0x2482, 0x2482, 0x2482}, {0x2483, 0x2483, 0x2483}, /* 2482 */
3389 {0x2484, 0x2484, 0x2484}, {0x2485, 0x2485, 0x2485}, /* 2484 */
3390 {0x2486, 0x2486, 0x2486}, {0x2487, 0x2487, 0x2487}, /* 2486 */
3391 {0x2488, 0x2488, 0x2488}, {0x2489, 0x2489, 0x2489}, /* 2488 */
3392 {0x248A, 0x248A, 0x248A}, {0x248B, 0x248B, 0x248B}, /* 248A */
3393 {0x248C, 0x248C, 0x248C}, {0x248D, 0x248D, 0x248D}, /* 248C */
3394 {0x248E, 0x248E, 0x248E}, {0x248F, 0x248F, 0x248F}, /* 248E */
3395 {0x2490, 0x2490, 0x2490}, {0x2491, 0x2491, 0x2491}, /* 2490 */
3396 {0x2492, 0x2492, 0x2492}, {0x2493, 0x2493, 0x2493}, /* 2492 */
3397 {0x2494, 0x2494, 0x2494}, {0x2495, 0x2495, 0x2495}, /* 2494 */
3398 {0x2496, 0x2496, 0x2496}, {0x2497, 0x2497, 0x2497}, /* 2496 */
3399 {0x2498, 0x2498, 0x2498}, {0x2499, 0x2499, 0x2499}, /* 2498 */
3400 {0x249A, 0x249A, 0x249A}, {0x249B, 0x249B, 0x249B}, /* 249A */
3401 {0x249C, 0x249C, 0x249C}, {0x249D, 0x249D, 0x249D}, /* 249C */
3402 {0x249E, 0x249E, 0x249E}, {0x249F, 0x249F, 0x249F}, /* 249E */
3403 {0x24A0, 0x24A0, 0x24A0}, {0x24A1, 0x24A1, 0x24A1}, /* 24A0 */
3404 {0x24A2, 0x24A2, 0x24A2}, {0x24A3, 0x24A3, 0x24A3}, /* 24A2 */
3405 {0x24A4, 0x24A4, 0x24A4}, {0x24A5, 0x24A5, 0x24A5}, /* 24A4 */
3406 {0x24A6, 0x24A6, 0x24A6}, {0x24A7, 0x24A7, 0x24A7}, /* 24A6 */
3407 {0x24A8, 0x24A8, 0x24A8}, {0x24A9, 0x24A9, 0x24A9}, /* 24A8 */
3408 {0x24AA, 0x24AA, 0x24AA}, {0x24AB, 0x24AB, 0x24AB}, /* 24AA */
3409 {0x24AC, 0x24AC, 0x24AC}, {0x24AD, 0x24AD, 0x24AD}, /* 24AC */
3410 {0x24AE, 0x24AE, 0x24AE}, {0x24AF, 0x24AF, 0x24AF}, /* 24AE */
3411 {0x24B0, 0x24B0, 0x24B0}, {0x24B1, 0x24B1, 0x24B1}, /* 24B0 */
3412 {0x24B2, 0x24B2, 0x24B2}, {0x24B3, 0x24B3, 0x24B3}, /* 24B2 */
3413 {0x24B4, 0x24B4, 0x24B4}, {0x24B5, 0x24B5, 0x24B5}, /* 24B4 */
3414 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7}, /* 24B6 */
3415 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9}, /* 24B8 */
3416 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB}, /* 24BA */
3417 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD}, /* 24BC */
3418 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF}, /* 24BE */
3419 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1}, /* 24C0 */
3420 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3}, /* 24C2 */
3421 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5}, /* 24C4 */
3422 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7}, /* 24C6 */
3423 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9}, /* 24C8 */
3424 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB}, /* 24CA */
3425 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD}, /* 24CC */
3426 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF}, /* 24CE */
3427 {0x24B6, 0x24D0, 0x24B6}, {0x24B7, 0x24D1, 0x24B7}, /* 24D0 */
3428 {0x24B8, 0x24D2, 0x24B8}, {0x24B9, 0x24D3, 0x24B9}, /* 24D2 */
3429 {0x24BA, 0x24D4, 0x24BA}, {0x24BB, 0x24D5, 0x24BB}, /* 24D4 */
3430 {0x24BC, 0x24D6, 0x24BC}, {0x24BD, 0x24D7, 0x24BD}, /* 24D6 */
3431 {0x24BE, 0x24D8, 0x24BE}, {0x24BF, 0x24D9, 0x24BF}, /* 24D8 */
3432 {0x24C0, 0x24DA, 0x24C0}, {0x24C1, 0x24DB, 0x24C1}, /* 24DA */
3433 {0x24C2, 0x24DC, 0x24C2}, {0x24C3, 0x24DD, 0x24C3}, /* 24DC */
3434 {0x24C4, 0x24DE, 0x24C4}, {0x24C5, 0x24DF, 0x24C5}, /* 24DE */
3435 {0x24C6, 0x24E0, 0x24C6}, {0x24C7, 0x24E1, 0x24C7}, /* 24E0 */
3436 {0x24C8, 0x24E2, 0x24C8}, {0x24C9, 0x24E3, 0x24C9}, /* 24E2 */
3437 {0x24CA, 0x24E4, 0x24CA}, {0x24CB, 0x24E5, 0x24CB}, /* 24E4 */
3438 {0x24CC, 0x24E6, 0x24CC}, {0x24CD, 0x24E7, 0x24CD}, /* 24E6 */
3439 {0x24CE, 0x24E8, 0x24CE}, {0x24CF, 0x24E9, 0x24CF}, /* 24E8 */
3440 {0x24EA, 0x24EA, 0x24EA}, {0x24EB, 0x24EB, 0x24EB}, /* 24EA */
3441 {0x24EC, 0x24EC, 0x24EC}, {0x24ED, 0x24ED, 0x24ED}, /* 24EC */
3442 {0x24EE, 0x24EE, 0x24EE}, {0x24EF, 0x24EF, 0x24EF}, /* 24EE */
3443 {0x24F0, 0x24F0, 0x24F0}, {0x24F1, 0x24F1, 0x24F1}, /* 24F0 */
3444 {0x24F2, 0x24F2, 0x24F2}, {0x24F3, 0x24F3, 0x24F3}, /* 24F2 */
3445 {0x24F4, 0x24F4, 0x24F4}, {0x24F5, 0x24F5, 0x24F5}, /* 24F4 */
3446 {0x24F6, 0x24F6, 0x24F6}, {0x24F7, 0x24F7, 0x24F7}, /* 24F6 */
3447 {0x24F8, 0x24F8, 0x24F8}, {0x24F9, 0x24F9, 0x24F9}, /* 24F8 */
3448 {0x24FA, 0x24FA, 0x24FA}, {0x24FB, 0x24FB, 0x24FB}, /* 24FA */
3449 {0x24FC, 0x24FC, 0x24FC}, {0x24FD, 0x24FD, 0x24FD}, /* 24FC */
3450 {0x24FE, 0x24FE, 0x24FE}, {0x24FF, 0x24FF, 0x24FF} /* 24FE */
3451 };
3452
3453 static const MY_UNICASE_CHARACTER u520p2C[] = {
3454 {0x2C00, 0x2C30, 0x2C00}, {0x2C01, 0x2C31, 0x2C01}, /* 2C00 */
3455 {0x2C02, 0x2C32, 0x2C02}, {0x2C03, 0x2C33, 0x2C03}, /* 2C02 */
3456 {0x2C04, 0x2C34, 0x2C04}, {0x2C05, 0x2C35, 0x2C05}, /* 2C04 */
3457 {0x2C06, 0x2C36, 0x2C06}, {0x2C07, 0x2C37, 0x2C07}, /* 2C06 */
3458 {0x2C08, 0x2C38, 0x2C08}, {0x2C09, 0x2C39, 0x2C09}, /* 2C08 */
3459 {0x2C0A, 0x2C3A, 0x2C0A}, {0x2C0B, 0x2C3B, 0x2C0B}, /* 2C0A */
3460 {0x2C0C, 0x2C3C, 0x2C0C}, {0x2C0D, 0x2C3D, 0x2C0D}, /* 2C0C */
3461 {0x2C0E, 0x2C3E, 0x2C0E}, {0x2C0F, 0x2C3F, 0x2C0F}, /* 2C0E */
3462 {0x2C10, 0x2C40, 0x2C10}, {0x2C11, 0x2C41, 0x2C11}, /* 2C10 */
3463 {0x2C12, 0x2C42, 0x2C12}, {0x2C13, 0x2C43, 0x2C13}, /* 2C12 */
3464 {0x2C14, 0x2C44, 0x2C14}, {0x2C15, 0x2C45, 0x2C15}, /* 2C14 */
3465 {0x2C16, 0x2C46, 0x2C16}, {0x2C17, 0x2C47, 0x2C17}, /* 2C16 */
3466 {0x2C18, 0x2C48, 0x2C18}, {0x2C19, 0x2C49, 0x2C19}, /* 2C18 */
3467 {0x2C1A, 0x2C4A, 0x2C1A}, {0x2C1B, 0x2C4B, 0x2C1B}, /* 2C1A */
3468 {0x2C1C, 0x2C4C, 0x2C1C}, {0x2C1D, 0x2C4D, 0x2C1D}, /* 2C1C */
3469 {0x2C1E, 0x2C4E, 0x2C1E}, {0x2C1F, 0x2C4F, 0x2C1F}, /* 2C1E */
3470 {0x2C20, 0x2C50, 0x2C20}, {0x2C21, 0x2C51, 0x2C21}, /* 2C20 */
3471 {0x2C22, 0x2C52, 0x2C22}, {0x2C23, 0x2C53, 0x2C23}, /* 2C22 */
3472 {0x2C24, 0x2C54, 0x2C24}, {0x2C25, 0x2C55, 0x2C25}, /* 2C24 */
3473 {0x2C26, 0x2C56, 0x2C26}, {0x2C27, 0x2C57, 0x2C27}, /* 2C26 */
3474 {0x2C28, 0x2C58, 0x2C28}, {0x2C29, 0x2C59, 0x2C29}, /* 2C28 */
3475 {0x2C2A, 0x2C5A, 0x2C2A}, {0x2C2B, 0x2C5B, 0x2C2B}, /* 2C2A */
3476 {0x2C2C, 0x2C5C, 0x2C2C}, {0x2C2D, 0x2C5D, 0x2C2D}, /* 2C2C */
3477 {0x2C2E, 0x2C5E, 0x2C2E}, {0x2C2F, 0x2C2F, 0x2C2F}, /* 2C2E */
3478 {0x2C00, 0x2C30, 0x2C00}, {0x2C01, 0x2C31, 0x2C01}, /* 2C30 */
3479 {0x2C02, 0x2C32, 0x2C02}, {0x2C03, 0x2C33, 0x2C03}, /* 2C32 */
3480 {0x2C04, 0x2C34, 0x2C04}, {0x2C05, 0x2C35, 0x2C05}, /* 2C34 */
3481 {0x2C06, 0x2C36, 0x2C06}, {0x2C07, 0x2C37, 0x2C07}, /* 2C36 */
3482 {0x2C08, 0x2C38, 0x2C08}, {0x2C09, 0x2C39, 0x2C09}, /* 2C38 */
3483 {0x2C0A, 0x2C3A, 0x2C0A}, {0x2C0B, 0x2C3B, 0x2C0B}, /* 2C3A */
3484 {0x2C0C, 0x2C3C, 0x2C0C}, {0x2C0D, 0x2C3D, 0x2C0D}, /* 2C3C */
3485 {0x2C0E, 0x2C3E, 0x2C0E}, {0x2C0F, 0x2C3F, 0x2C0F}, /* 2C3E */
3486 {0x2C10, 0x2C40, 0x2C10}, {0x2C11, 0x2C41, 0x2C11}, /* 2C40 */
3487 {0x2C12, 0x2C42, 0x2C12}, {0x2C13, 0x2C43, 0x2C13}, /* 2C42 */
3488 {0x2C14, 0x2C44, 0x2C14}, {0x2C15, 0x2C45, 0x2C15}, /* 2C44 */
3489 {0x2C16, 0x2C46, 0x2C16}, {0x2C17, 0x2C47, 0x2C17}, /* 2C46 */
3490 {0x2C18, 0x2C48, 0x2C18}, {0x2C19, 0x2C49, 0x2C19}, /* 2C48 */
3491 {0x2C1A, 0x2C4A, 0x2C1A}, {0x2C1B, 0x2C4B, 0x2C1B}, /* 2C4A */
3492 {0x2C1C, 0x2C4C, 0x2C1C}, {0x2C1D, 0x2C4D, 0x2C1D}, /* 2C4C */
3493 {0x2C1E, 0x2C4E, 0x2C1E}, {0x2C1F, 0x2C4F, 0x2C1F}, /* 2C4E */
3494 {0x2C20, 0x2C50, 0x2C20}, {0x2C21, 0x2C51, 0x2C21}, /* 2C50 */
3495 {0x2C22, 0x2C52, 0x2C22}, {0x2C23, 0x2C53, 0x2C23}, /* 2C52 */
3496 {0x2C24, 0x2C54, 0x2C24}, {0x2C25, 0x2C55, 0x2C25}, /* 2C54 */
3497 {0x2C26, 0x2C56, 0x2C26}, {0x2C27, 0x2C57, 0x2C27}, /* 2C56 */
3498 {0x2C28, 0x2C58, 0x2C28}, {0x2C29, 0x2C59, 0x2C29}, /* 2C58 */
3499 {0x2C2A, 0x2C5A, 0x2C2A}, {0x2C2B, 0x2C5B, 0x2C2B}, /* 2C5A */
3500 {0x2C2C, 0x2C5C, 0x2C2C}, {0x2C2D, 0x2C5D, 0x2C2D}, /* 2C5C */
3501 {0x2C2E, 0x2C5E, 0x2C2E}, {0x2C5F, 0x2C5F, 0x2C5F}, /* 2C5E */
3502 {0x2C60, 0x2C61, 0x2C60}, {0x2C60, 0x2C61, 0x2C60}, /* 2C60 */
3503 {0x2C62, 0x026B, 0x2C62}, {0x2C63, 0x1D7D, 0x2C63}, /* 2C62 */
3504 {0x2C64, 0x027D, 0x2C64}, {0x023A, 0x2C65, 0x023A}, /* 2C64 */
3505 {0x023E, 0x2C66, 0x023E}, {0x2C67, 0x2C68, 0x2C67}, /* 2C66 */
3506 {0x2C67, 0x2C68, 0x2C67}, {0x2C69, 0x2C6A, 0x2C69}, /* 2C68 */
3507 {0x2C69, 0x2C6A, 0x2C69}, {0x2C6B, 0x2C6C, 0x2C6B}, /* 2C6A */
3508 {0x2C6B, 0x2C6C, 0x2C6B}, {0x2C6D, 0x0251, 0x2C6D}, /* 2C6C */
3509 {0x2C6E, 0x0271, 0x2C6E}, {0x2C6F, 0x0250, 0x2C6F}, /* 2C6E */
3510 {0x2C70, 0x0252, 0x2C70}, {0x2C71, 0x2C71, 0x2C71}, /* 2C70 */
3511 {0x2C72, 0x2C73, 0x2C72}, {0x2C72, 0x2C73, 0x2C72}, /* 2C72 */
3512 {0x2C74, 0x2C74, 0x2C74}, {0x2C75, 0x2C76, 0x2C75}, /* 2C74 */
3513 {0x2C75, 0x2C76, 0x2C75}, {0x2C77, 0x2C77, 0x2C77}, /* 2C76 */
3514 {0x2C78, 0x2C78, 0x2C78}, {0x2C79, 0x2C79, 0x2C79}, /* 2C78 */
3515 {0x2C7A, 0x2C7A, 0x2C7A}, {0x2C7B, 0x2C7B, 0x2C7B}, /* 2C7A */
3516 {0x2C7C, 0x2C7C, 0x2C7C}, {0x2C7D, 0x2C7D, 0x2C7D}, /* 2C7C */
3517 {0x2C7E, 0x023F, 0x2C7E}, {0x2C7F, 0x0240, 0x2C7F}, /* 2C7E */
3518 {0x2C80, 0x2C81, 0x2C80}, {0x2C80, 0x2C81, 0x2C80}, /* 2C80 */
3519 {0x2C82, 0x2C83, 0x2C82}, {0x2C82, 0x2C83, 0x2C82}, /* 2C82 */
3520 {0x2C84, 0x2C85, 0x2C84}, {0x2C84, 0x2C85, 0x2C84}, /* 2C84 */
3521 {0x2C86, 0x2C87, 0x2C86}, {0x2C86, 0x2C87, 0x2C86}, /* 2C86 */
3522 {0x2C88, 0x2C89, 0x2C88}, {0x2C88, 0x2C89, 0x2C88}, /* 2C88 */
3523 {0x2C8A, 0x2C8B, 0x2C8A}, {0x2C8A, 0x2C8B, 0x2C8A}, /* 2C8A */
3524 {0x2C8C, 0x2C8D, 0x2C8C}, {0x2C8C, 0x2C8D, 0x2C8C}, /* 2C8C */
3525 {0x2C8E, 0x2C8F, 0x2C8E}, {0x2C8E, 0x2C8F, 0x2C8E}, /* 2C8E */
3526 {0x2C90, 0x2C91, 0x2C90}, {0x2C90, 0x2C91, 0x2C90}, /* 2C90 */
3527 {0x2C92, 0x2C93, 0x2C92}, {0x2C92, 0x2C93, 0x2C92}, /* 2C92 */
3528 {0x2C94, 0x2C95, 0x2C94}, {0x2C94, 0x2C95, 0x2C94}, /* 2C94 */
3529 {0x2C96, 0x2C97, 0x2C96}, {0x2C96, 0x2C97, 0x2C96}, /* 2C96 */
3530 {0x2C98, 0x2C99, 0x2C98}, {0x2C98, 0x2C99, 0x2C98}, /* 2C98 */
3531 {0x2C9A, 0x2C9B, 0x2C9A}, {0x2C9A, 0x2C9B, 0x2C9A}, /* 2C9A */
3532 {0x2C9C, 0x2C9D, 0x2C9C}, {0x2C9C, 0x2C9D, 0x2C9C}, /* 2C9C */
3533 {0x2C9E, 0x2C9F, 0x2C9E}, {0x2C9E, 0x2C9F, 0x2C9E}, /* 2C9E */
3534 {0x2CA0, 0x2CA1, 0x2CA0}, {0x2CA0, 0x2CA1, 0x2CA0}, /* 2CA0 */
3535 {0x2CA2, 0x2CA3, 0x2CA2}, {0x2CA2, 0x2CA3, 0x2CA2}, /* 2CA2 */
3536 {0x2CA4, 0x2CA5, 0x2CA4}, {0x2CA4, 0x2CA5, 0x2CA4}, /* 2CA4 */
3537 {0x2CA6, 0x2CA7, 0x2CA6}, {0x2CA6, 0x2CA7, 0x2CA6}, /* 2CA6 */
3538 {0x2CA8, 0x2CA9, 0x2CA8}, {0x2CA8, 0x2CA9, 0x2CA8}, /* 2CA8 */
3539 {0x2CAA, 0x2CAB, 0x2CAA}, {0x2CAA, 0x2CAB, 0x2CAA}, /* 2CAA */
3540 {0x2CAC, 0x2CAD, 0x2CAC}, {0x2CAC, 0x2CAD, 0x2CAC}, /* 2CAC */
3541 {0x2CAE, 0x2CAF, 0x2CAE}, {0x2CAE, 0x2CAF, 0x2CAE}, /* 2CAE */
3542 {0x2CB0, 0x2CB1, 0x2CB0}, {0x2CB0, 0x2CB1, 0x2CB0}, /* 2CB0 */
3543 {0x2CB2, 0x2CB3, 0x2CB2}, {0x2CB2, 0x2CB3, 0x2CB2}, /* 2CB2 */
3544 {0x2CB4, 0x2CB5, 0x2CB4}, {0x2CB4, 0x2CB5, 0x2CB4}, /* 2CB4 */
3545 {0x2CB6, 0x2CB7, 0x2CB6}, {0x2CB6, 0x2CB7, 0x2CB6}, /* 2CB6 */
3546 {0x2CB8, 0x2CB9, 0x2CB8}, {0x2CB8, 0x2CB9, 0x2CB8}, /* 2CB8 */
3547 {0x2CBA, 0x2CBB, 0x2CBA}, {0x2CBA, 0x2CBB, 0x2CBA}, /* 2CBA */
3548 {0x2CBC, 0x2CBD, 0x2CBC}, {0x2CBC, 0x2CBD, 0x2CBC}, /* 2CBC */
3549 {0x2CBE, 0x2CBF, 0x2CBE}, {0x2CBE, 0x2CBF, 0x2CBE}, /* 2CBE */
3550 {0x2CC0, 0x2CC1, 0x2CC0}, {0x2CC0, 0x2CC1, 0x2CC0}, /* 2CC0 */
3551 {0x2CC2, 0x2CC3, 0x2CC2}, {0x2CC2, 0x2CC3, 0x2CC2}, /* 2CC2 */
3552 {0x2CC4, 0x2CC5, 0x2CC4}, {0x2CC4, 0x2CC5, 0x2CC4}, /* 2CC4 */
3553 {0x2CC6, 0x2CC7, 0x2CC6}, {0x2CC6, 0x2CC7, 0x2CC6}, /* 2CC6 */
3554 {0x2CC8, 0x2CC9, 0x2CC8}, {0x2CC8, 0x2CC9, 0x2CC8}, /* 2CC8 */
3555 {0x2CCA, 0x2CCB, 0x2CCA}, {0x2CCA, 0x2CCB, 0x2CCA}, /* 2CCA */
3556 {0x2CCC, 0x2CCD, 0x2CCC}, {0x2CCC, 0x2CCD, 0x2CCC}, /* 2CCC */
3557 {0x2CCE, 0x2CCF, 0x2CCE}, {0x2CCE, 0x2CCF, 0x2CCE}, /* 2CCE */
3558 {0x2CD0, 0x2CD1, 0x2CD0}, {0x2CD0, 0x2CD1, 0x2CD0}, /* 2CD0 */
3559 {0x2CD2, 0x2CD3, 0x2CD2}, {0x2CD2, 0x2CD3, 0x2CD2}, /* 2CD2 */
3560 {0x2CD4, 0x2CD5, 0x2CD4}, {0x2CD4, 0x2CD5, 0x2CD4}, /* 2CD4 */
3561 {0x2CD6, 0x2CD7, 0x2CD6}, {0x2CD6, 0x2CD7, 0x2CD6}, /* 2CD6 */
3562 {0x2CD8, 0x2CD9, 0x2CD8}, {0x2CD8, 0x2CD9, 0x2CD8}, /* 2CD8 */
3563 {0x2CDA, 0x2CDB, 0x2CDA}, {0x2CDA, 0x2CDB, 0x2CDA}, /* 2CDA */
3564 {0x2CDC, 0x2CDD, 0x2CDC}, {0x2CDC, 0x2CDD, 0x2CDC}, /* 2CDC */
3565 {0x2CDE, 0x2CDF, 0x2CDE}, {0x2CDE, 0x2CDF, 0x2CDE}, /* 2CDE */
3566 {0x2CE0, 0x2CE1, 0x2CE0}, {0x2CE0, 0x2CE1, 0x2CE0}, /* 2CE0 */
3567 {0x2CE2, 0x2CE3, 0x2CE2}, {0x2CE2, 0x2CE3, 0x2CE2}, /* 2CE2 */
3568 {0x2CE4, 0x2CE4, 0x2CE4}, {0x2CE5, 0x2CE5, 0x2CE5}, /* 2CE4 */
3569 {0x2CE6, 0x2CE6, 0x2CE6}, {0x2CE7, 0x2CE7, 0x2CE7}, /* 2CE6 */
3570 {0x2CE8, 0x2CE8, 0x2CE8}, {0x2CE9, 0x2CE9, 0x2CE9}, /* 2CE8 */
3571 {0x2CEA, 0x2CEA, 0x2CEA}, {0x2CEB, 0x2CEC, 0x2CEB}, /* 2CEA */
3572 {0x2CEB, 0x2CEC, 0x2CEB}, {0x2CED, 0x2CEE, 0x2CED}, /* 2CEC */
3573 {0x2CED, 0x2CEE, 0x2CED}, {0x2CEF, 0x2CEF, 0x2CEF}, /* 2CEE */
3574 {0x2CF0, 0x2CF0, 0x2CF0}, {0x2CF1, 0x2CF1, 0x2CF1}, /* 2CF0 */
3575 {0x2CF2, 0x2CF2, 0x2CF2}, {0x2CF3, 0x2CF3, 0x2CF3}, /* 2CF2 */
3576 {0x2CF4, 0x2CF4, 0x2CF4}, {0x2CF5, 0x2CF5, 0x2CF5}, /* 2CF4 */
3577 {0x2CF6, 0x2CF6, 0x2CF6}, {0x2CF7, 0x2CF7, 0x2CF7}, /* 2CF6 */
3578 {0x2CF8, 0x2CF8, 0x2CF8}, {0x2CF9, 0x2CF9, 0x2CF9}, /* 2CF8 */
3579 {0x2CFA, 0x2CFA, 0x2CFA}, {0x2CFB, 0x2CFB, 0x2CFB}, /* 2CFA */
3580 {0x2CFC, 0x2CFC, 0x2CFC}, {0x2CFD, 0x2CFD, 0x2CFD}, /* 2CFC */
3581 {0x2CFE, 0x2CFE, 0x2CFE}, {0x2CFF, 0x2CFF, 0x2CFF} /* 2CFE */
3582 };
3583
3584 static const MY_UNICASE_CHARACTER u520p2D[] = {
3585 {0x10A0, 0x2D00, 0x10A0}, {0x10A1, 0x2D01, 0x10A1}, /* 2D00 */
3586 {0x10A2, 0x2D02, 0x10A2}, {0x10A3, 0x2D03, 0x10A3}, /* 2D02 */
3587 {0x10A4, 0x2D04, 0x10A4}, {0x10A5, 0x2D05, 0x10A5}, /* 2D04 */
3588 {0x10A6, 0x2D06, 0x10A6}, {0x10A7, 0x2D07, 0x10A7}, /* 2D06 */
3589 {0x10A8, 0x2D08, 0x10A8}, {0x10A9, 0x2D09, 0x10A9}, /* 2D08 */
3590 {0x10AA, 0x2D0A, 0x10AA}, {0x10AB, 0x2D0B, 0x10AB}, /* 2D0A */
3591 {0x10AC, 0x2D0C, 0x10AC}, {0x10AD, 0x2D0D, 0x10AD}, /* 2D0C */
3592 {0x10AE, 0x2D0E, 0x10AE}, {0x10AF, 0x2D0F, 0x10AF}, /* 2D0E */
3593 {0x10B0, 0x2D10, 0x10B0}, {0x10B1, 0x2D11, 0x10B1}, /* 2D10 */
3594 {0x10B2, 0x2D12, 0x10B2}, {0x10B3, 0x2D13, 0x10B3}, /* 2D12 */
3595 {0x10B4, 0x2D14, 0x10B4}, {0x10B5, 0x2D15, 0x10B5}, /* 2D14 */
3596 {0x10B6, 0x2D16, 0x10B6}, {0x10B7, 0x2D17, 0x10B7}, /* 2D16 */
3597 {0x10B8, 0x2D18, 0x10B8}, {0x10B9, 0x2D19, 0x10B9}, /* 2D18 */
3598 {0x10BA, 0x2D1A, 0x10BA}, {0x10BB, 0x2D1B, 0x10BB}, /* 2D1A */
3599 {0x10BC, 0x2D1C, 0x10BC}, {0x10BD, 0x2D1D, 0x10BD}, /* 2D1C */
3600 {0x10BE, 0x2D1E, 0x10BE}, {0x10BF, 0x2D1F, 0x10BF}, /* 2D1E */
3601 {0x10C0, 0x2D20, 0x10C0}, {0x10C1, 0x2D21, 0x10C1}, /* 2D20 */
3602 {0x10C2, 0x2D22, 0x10C2}, {0x10C3, 0x2D23, 0x10C3}, /* 2D22 */
3603 {0x10C4, 0x2D24, 0x10C4}, {0x10C5, 0x2D25, 0x10C5}, /* 2D24 */
3604 {0x2D26, 0x2D26, 0x2D26}, {0x2D27, 0x2D27, 0x2D27}, /* 2D26 */
3605 {0x2D28, 0x2D28, 0x2D28}, {0x2D29, 0x2D29, 0x2D29}, /* 2D28 */
3606 {0x2D2A, 0x2D2A, 0x2D2A}, {0x2D2B, 0x2D2B, 0x2D2B}, /* 2D2A */
3607 {0x2D2C, 0x2D2C, 0x2D2C}, {0x2D2D, 0x2D2D, 0x2D2D}, /* 2D2C */
3608 {0x2D2E, 0x2D2E, 0x2D2E}, {0x2D2F, 0x2D2F, 0x2D2F}, /* 2D2E */
3609 {0x2D30, 0x2D30, 0x2D30}, {0x2D31, 0x2D31, 0x2D31}, /* 2D30 */
3610 {0x2D32, 0x2D32, 0x2D32}, {0x2D33, 0x2D33, 0x2D33}, /* 2D32 */
3611 {0x2D34, 0x2D34, 0x2D34}, {0x2D35, 0x2D35, 0x2D35}, /* 2D34 */
3612 {0x2D36, 0x2D36, 0x2D36}, {0x2D37, 0x2D37, 0x2D37}, /* 2D36 */
3613 {0x2D38, 0x2D38, 0x2D38}, {0x2D39, 0x2D39, 0x2D39}, /* 2D38 */
3614 {0x2D3A, 0x2D3A, 0x2D3A}, {0x2D3B, 0x2D3B, 0x2D3B}, /* 2D3A */
3615 {0x2D3C, 0x2D3C, 0x2D3C}, {0x2D3D, 0x2D3D, 0x2D3D}, /* 2D3C */
3616 {0x2D3E, 0x2D3E, 0x2D3E}, {0x2D3F, 0x2D3F, 0x2D3F}, /* 2D3E */
3617 {0x2D40, 0x2D40, 0x2D40}, {0x2D41, 0x2D41, 0x2D41}, /* 2D40 */
3618 {0x2D42, 0x2D42, 0x2D42}, {0x2D43, 0x2D43, 0x2D43}, /* 2D42 */
3619 {0x2D44, 0x2D44, 0x2D44}, {0x2D45, 0x2D45, 0x2D45}, /* 2D44 */
3620 {0x2D46, 0x2D46, 0x2D46}, {0x2D47, 0x2D47, 0x2D47}, /* 2D46 */
3621 {0x2D48, 0x2D48, 0x2D48}, {0x2D49, 0x2D49, 0x2D49}, /* 2D48 */
3622 {0x2D4A, 0x2D4A, 0x2D4A}, {0x2D4B, 0x2D4B, 0x2D4B}, /* 2D4A */
3623 {0x2D4C, 0x2D4C, 0x2D4C}, {0x2D4D, 0x2D4D, 0x2D4D}, /* 2D4C */
3624 {0x2D4E, 0x2D4E, 0x2D4E}, {0x2D4F, 0x2D4F, 0x2D4F}, /* 2D4E */
3625 {0x2D50, 0x2D50, 0x2D50}, {0x2D51, 0x2D51, 0x2D51}, /* 2D50 */
3626 {0x2D52, 0x2D52, 0x2D52}, {0x2D53, 0x2D53, 0x2D53}, /* 2D52 */
3627 {0x2D54, 0x2D54, 0x2D54}, {0x2D55, 0x2D55, 0x2D55}, /* 2D54 */
3628 {0x2D56, 0x2D56, 0x2D56}, {0x2D57, 0x2D57, 0x2D57}, /* 2D56 */
3629 {0x2D58, 0x2D58, 0x2D58}, {0x2D59, 0x2D59, 0x2D59}, /* 2D58 */
3630 {0x2D5A, 0x2D5A, 0x2D5A}, {0x2D5B, 0x2D5B, 0x2D5B}, /* 2D5A */
3631 {0x2D5C, 0x2D5C, 0x2D5C}, {0x2D5D, 0x2D5D, 0x2D5D}, /* 2D5C */
3632 {0x2D5E, 0x2D5E, 0x2D5E}, {0x2D5F, 0x2D5F, 0x2D5F}, /* 2D5E */
3633 {0x2D60, 0x2D60, 0x2D60}, {0x2D61, 0x2D61, 0x2D61}, /* 2D60 */
3634 {0x2D62, 0x2D62, 0x2D62}, {0x2D63, 0x2D63, 0x2D63}, /* 2D62 */
3635 {0x2D64, 0x2D64, 0x2D64}, {0x2D65, 0x2D65, 0x2D65}, /* 2D64 */
3636 {0x2D66, 0x2D66, 0x2D66}, {0x2D67, 0x2D67, 0x2D67}, /* 2D66 */
3637 {0x2D68, 0x2D68, 0x2D68}, {0x2D69, 0x2D69, 0x2D69}, /* 2D68 */
3638 {0x2D6A, 0x2D6A, 0x2D6A}, {0x2D6B, 0x2D6B, 0x2D6B}, /* 2D6A */
3639 {0x2D6C, 0x2D6C, 0x2D6C}, {0x2D6D, 0x2D6D, 0x2D6D}, /* 2D6C */
3640 {0x2D6E, 0x2D6E, 0x2D6E}, {0x2D6F, 0x2D6F, 0x2D6F}, /* 2D6E */
3641 {0x2D70, 0x2D70, 0x2D70}, {0x2D71, 0x2D71, 0x2D71}, /* 2D70 */
3642 {0x2D72, 0x2D72, 0x2D72}, {0x2D73, 0x2D73, 0x2D73}, /* 2D72 */
3643 {0x2D74, 0x2D74, 0x2D74}, {0x2D75, 0x2D75, 0x2D75}, /* 2D74 */
3644 {0x2D76, 0x2D76, 0x2D76}, {0x2D77, 0x2D77, 0x2D77}, /* 2D76 */
3645 {0x2D78, 0x2D78, 0x2D78}, {0x2D79, 0x2D79, 0x2D79}, /* 2D78 */
3646 {0x2D7A, 0x2D7A, 0x2D7A}, {0x2D7B, 0x2D7B, 0x2D7B}, /* 2D7A */
3647 {0x2D7C, 0x2D7C, 0x2D7C}, {0x2D7D, 0x2D7D, 0x2D7D}, /* 2D7C */
3648 {0x2D7E, 0x2D7E, 0x2D7E}, {0x2D7F, 0x2D7F, 0x2D7F}, /* 2D7E */
3649 {0x2D80, 0x2D80, 0x2D80}, {0x2D81, 0x2D81, 0x2D81}, /* 2D80 */
3650 {0x2D82, 0x2D82, 0x2D82}, {0x2D83, 0x2D83, 0x2D83}, /* 2D82 */
3651 {0x2D84, 0x2D84, 0x2D84}, {0x2D85, 0x2D85, 0x2D85}, /* 2D84 */
3652 {0x2D86, 0x2D86, 0x2D86}, {0x2D87, 0x2D87, 0x2D87}, /* 2D86 */
3653 {0x2D88, 0x2D88, 0x2D88}, {0x2D89, 0x2D89, 0x2D89}, /* 2D88 */
3654 {0x2D8A, 0x2D8A, 0x2D8A}, {0x2D8B, 0x2D8B, 0x2D8B}, /* 2D8A */
3655 {0x2D8C, 0x2D8C, 0x2D8C}, {0x2D8D, 0x2D8D, 0x2D8D}, /* 2D8C */
3656 {0x2D8E, 0x2D8E, 0x2D8E}, {0x2D8F, 0x2D8F, 0x2D8F}, /* 2D8E */
3657 {0x2D90, 0x2D90, 0x2D90}, {0x2D91, 0x2D91, 0x2D91}, /* 2D90 */
3658 {0x2D92, 0x2D92, 0x2D92}, {0x2D93, 0x2D93, 0x2D93}, /* 2D92 */
3659 {0x2D94, 0x2D94, 0x2D94}, {0x2D95, 0x2D95, 0x2D95}, /* 2D94 */
3660 {0x2D96, 0x2D96, 0x2D96}, {0x2D97, 0x2D97, 0x2D97}, /* 2D96 */
3661 {0x2D98, 0x2D98, 0x2D98}, {0x2D99, 0x2D99, 0x2D99}, /* 2D98 */
3662 {0x2D9A, 0x2D9A, 0x2D9A}, {0x2D9B, 0x2D9B, 0x2D9B}, /* 2D9A */
3663 {0x2D9C, 0x2D9C, 0x2D9C}, {0x2D9D, 0x2D9D, 0x2D9D}, /* 2D9C */
3664 {0x2D9E, 0x2D9E, 0x2D9E}, {0x2D9F, 0x2D9F, 0x2D9F}, /* 2D9E */
3665 {0x2DA0, 0x2DA0, 0x2DA0}, {0x2DA1, 0x2DA1, 0x2DA1}, /* 2DA0 */
3666 {0x2DA2, 0x2DA2, 0x2DA2}, {0x2DA3, 0x2DA3, 0x2DA3}, /* 2DA2 */
3667 {0x2DA4, 0x2DA4, 0x2DA4}, {0x2DA5, 0x2DA5, 0x2DA5}, /* 2DA4 */
3668 {0x2DA6, 0x2DA6, 0x2DA6}, {0x2DA7, 0x2DA7, 0x2DA7}, /* 2DA6 */
3669 {0x2DA8, 0x2DA8, 0x2DA8}, {0x2DA9, 0x2DA9, 0x2DA9}, /* 2DA8 */
3670 {0x2DAA, 0x2DAA, 0x2DAA}, {0x2DAB, 0x2DAB, 0x2DAB}, /* 2DAA */
3671 {0x2DAC, 0x2DAC, 0x2DAC}, {0x2DAD, 0x2DAD, 0x2DAD}, /* 2DAC */
3672 {0x2DAE, 0x2DAE, 0x2DAE}, {0x2DAF, 0x2DAF, 0x2DAF}, /* 2DAE */
3673 {0x2DB0, 0x2DB0, 0x2DB0}, {0x2DB1, 0x2DB1, 0x2DB1}, /* 2DB0 */
3674 {0x2DB2, 0x2DB2, 0x2DB2}, {0x2DB3, 0x2DB3, 0x2DB3}, /* 2DB2 */
3675 {0x2DB4, 0x2DB4, 0x2DB4}, {0x2DB5, 0x2DB5, 0x2DB5}, /* 2DB4 */
3676 {0x2DB6, 0x2DB6, 0x2DB6}, {0x2DB7, 0x2DB7, 0x2DB7}, /* 2DB6 */
3677 {0x2DB8, 0x2DB8, 0x2DB8}, {0x2DB9, 0x2DB9, 0x2DB9}, /* 2DB8 */
3678 {0x2DBA, 0x2DBA, 0x2DBA}, {0x2DBB, 0x2DBB, 0x2DBB}, /* 2DBA */
3679 {0x2DBC, 0x2DBC, 0x2DBC}, {0x2DBD, 0x2DBD, 0x2DBD}, /* 2DBC */
3680 {0x2DBE, 0x2DBE, 0x2DBE}, {0x2DBF, 0x2DBF, 0x2DBF}, /* 2DBE */
3681 {0x2DC0, 0x2DC0, 0x2DC0}, {0x2DC1, 0x2DC1, 0x2DC1}, /* 2DC0 */
3682 {0x2DC2, 0x2DC2, 0x2DC2}, {0x2DC3, 0x2DC3, 0x2DC3}, /* 2DC2 */
3683 {0x2DC4, 0x2DC4, 0x2DC4}, {0x2DC5, 0x2DC5, 0x2DC5}, /* 2DC4 */
3684 {0x2DC6, 0x2DC6, 0x2DC6}, {0x2DC7, 0x2DC7, 0x2DC7}, /* 2DC6 */
3685 {0x2DC8, 0x2DC8, 0x2DC8}, {0x2DC9, 0x2DC9, 0x2DC9}, /* 2DC8 */
3686 {0x2DCA, 0x2DCA, 0x2DCA}, {0x2DCB, 0x2DCB, 0x2DCB}, /* 2DCA */
3687 {0x2DCC, 0x2DCC, 0x2DCC}, {0x2DCD, 0x2DCD, 0x2DCD}, /* 2DCC */
3688 {0x2DCE, 0x2DCE, 0x2DCE}, {0x2DCF, 0x2DCF, 0x2DCF}, /* 2DCE */
3689 {0x2DD0, 0x2DD0, 0x2DD0}, {0x2DD1, 0x2DD1, 0x2DD1}, /* 2DD0 */
3690 {0x2DD2, 0x2DD2, 0x2DD2}, {0x2DD3, 0x2DD3, 0x2DD3}, /* 2DD2 */
3691 {0x2DD4, 0x2DD4, 0x2DD4}, {0x2DD5, 0x2DD5, 0x2DD5}, /* 2DD4 */
3692 {0x2DD6, 0x2DD6, 0x2DD6}, {0x2DD7, 0x2DD7, 0x2DD7}, /* 2DD6 */
3693 {0x2DD8, 0x2DD8, 0x2DD8}, {0x2DD9, 0x2DD9, 0x2DD9}, /* 2DD8 */
3694 {0x2DDA, 0x2DDA, 0x2DDA}, {0x2DDB, 0x2DDB, 0x2DDB}, /* 2DDA */
3695 {0x2DDC, 0x2DDC, 0x2DDC}, {0x2DDD, 0x2DDD, 0x2DDD}, /* 2DDC */
3696 {0x2DDE, 0x2DDE, 0x2DDE}, {0x2DDF, 0x2DDF, 0x2DDF}, /* 2DDE */
3697 {0x2DE0, 0x2DE0, 0x2DE0}, {0x2DE1, 0x2DE1, 0x2DE1}, /* 2DE0 */
3698 {0x2DE2, 0x2DE2, 0x2DE2}, {0x2DE3, 0x2DE3, 0x2DE3}, /* 2DE2 */
3699 {0x2DE4, 0x2DE4, 0x2DE4}, {0x2DE5, 0x2DE5, 0x2DE5}, /* 2DE4 */
3700 {0x2DE6, 0x2DE6, 0x2DE6}, {0x2DE7, 0x2DE7, 0x2DE7}, /* 2DE6 */
3701 {0x2DE8, 0x2DE8, 0x2DE8}, {0x2DE9, 0x2DE9, 0x2DE9}, /* 2DE8 */
3702 {0x2DEA, 0x2DEA, 0x2DEA}, {0x2DEB, 0x2DEB, 0x2DEB}, /* 2DEA */
3703 {0x2DEC, 0x2DEC, 0x2DEC}, {0x2DED, 0x2DED, 0x2DED}, /* 2DEC */
3704 {0x2DEE, 0x2DEE, 0x2DEE}, {0x2DEF, 0x2DEF, 0x2DEF}, /* 2DEE */
3705 {0x2DF0, 0x2DF0, 0x2DF0}, {0x2DF1, 0x2DF1, 0x2DF1}, /* 2DF0 */
3706 {0x2DF2, 0x2DF2, 0x2DF2}, {0x2DF3, 0x2DF3, 0x2DF3}, /* 2DF2 */
3707 {0x2DF4, 0x2DF4, 0x2DF4}, {0x2DF5, 0x2DF5, 0x2DF5}, /* 2DF4 */
3708 {0x2DF6, 0x2DF6, 0x2DF6}, {0x2DF7, 0x2DF7, 0x2DF7}, /* 2DF6 */
3709 {0x2DF8, 0x2DF8, 0x2DF8}, {0x2DF9, 0x2DF9, 0x2DF9}, /* 2DF8 */
3710 {0x2DFA, 0x2DFA, 0x2DFA}, {0x2DFB, 0x2DFB, 0x2DFB}, /* 2DFA */
3711 {0x2DFC, 0x2DFC, 0x2DFC}, {0x2DFD, 0x2DFD, 0x2DFD}, /* 2DFC */
3712 {0x2DFE, 0x2DFE, 0x2DFE}, {0x2DFF, 0x2DFF, 0x2DFF} /* 2DFE */
3713 };
3714
3715 static const MY_UNICASE_CHARACTER u520pA6[] = {
3716 {0xA600, 0xA600, 0xA600}, {0xA601, 0xA601, 0xA601}, /* A600 */
3717 {0xA602, 0xA602, 0xA602}, {0xA603, 0xA603, 0xA603}, /* A602 */
3718 {0xA604, 0xA604, 0xA604}, {0xA605, 0xA605, 0xA605}, /* A604 */
3719 {0xA606, 0xA606, 0xA606}, {0xA607, 0xA607, 0xA607}, /* A606 */
3720 {0xA608, 0xA608, 0xA608}, {0xA609, 0xA609, 0xA609}, /* A608 */
3721 {0xA60A, 0xA60A, 0xA60A}, {0xA60B, 0xA60B, 0xA60B}, /* A60A */
3722 {0xA60C, 0xA60C, 0xA60C}, {0xA60D, 0xA60D, 0xA60D}, /* A60C */
3723 {0xA60E, 0xA60E, 0xA60E}, {0xA60F, 0xA60F, 0xA60F}, /* A60E */
3724 {0xA610, 0xA610, 0xA610}, {0xA611, 0xA611, 0xA611}, /* A610 */
3725 {0xA612, 0xA612, 0xA612}, {0xA613, 0xA613, 0xA613}, /* A612 */
3726 {0xA614, 0xA614, 0xA614}, {0xA615, 0xA615, 0xA615}, /* A614 */
3727 {0xA616, 0xA616, 0xA616}, {0xA617, 0xA617, 0xA617}, /* A616 */
3728 {0xA618, 0xA618, 0xA618}, {0xA619, 0xA619, 0xA619}, /* A618 */
3729 {0xA61A, 0xA61A, 0xA61A}, {0xA61B, 0xA61B, 0xA61B}, /* A61A */
3730 {0xA61C, 0xA61C, 0xA61C}, {0xA61D, 0xA61D, 0xA61D}, /* A61C */
3731 {0xA61E, 0xA61E, 0xA61E}, {0xA61F, 0xA61F, 0xA61F}, /* A61E */
3732 {0xA620, 0xA620, 0xA620}, {0xA621, 0xA621, 0xA621}, /* A620 */
3733 {0xA622, 0xA622, 0xA622}, {0xA623, 0xA623, 0xA623}, /* A622 */
3734 {0xA624, 0xA624, 0xA624}, {0xA625, 0xA625, 0xA625}, /* A624 */
3735 {0xA626, 0xA626, 0xA626}, {0xA627, 0xA627, 0xA627}, /* A626 */
3736 {0xA628, 0xA628, 0xA628}, {0xA629, 0xA629, 0xA629}, /* A628 */
3737 {0xA62A, 0xA62A, 0xA62A}, {0xA62B, 0xA62B, 0xA62B}, /* A62A */
3738 {0xA62C, 0xA62C, 0xA62C}, {0xA62D, 0xA62D, 0xA62D}, /* A62C */
3739 {0xA62E, 0xA62E, 0xA62E}, {0xA62F, 0xA62F, 0xA62F}, /* A62E */
3740 {0xA630, 0xA630, 0xA630}, {0xA631, 0xA631, 0xA631}, /* A630 */
3741 {0xA632, 0xA632, 0xA632}, {0xA633, 0xA633, 0xA633}, /* A632 */
3742 {0xA634, 0xA634, 0xA634}, {0xA635, 0xA635, 0xA635}, /* A634 */
3743 {0xA636, 0xA636, 0xA636}, {0xA637, 0xA637, 0xA637}, /* A636 */
3744 {0xA638, 0xA638, 0xA638}, {0xA639, 0xA639, 0xA639}, /* A638 */
3745 {0xA63A, 0xA63A, 0xA63A}, {0xA63B, 0xA63B, 0xA63B}, /* A63A */
3746 {0xA63C, 0xA63C, 0xA63C}, {0xA63D, 0xA63D, 0xA63D}, /* A63C */
3747 {0xA63E, 0xA63E, 0xA63E}, {0xA63F, 0xA63F, 0xA63F}, /* A63E */
3748 {0xA640, 0xA641, 0xA640}, {0xA640, 0xA641, 0xA640}, /* A640 */
3749 {0xA642, 0xA643, 0xA642}, {0xA642, 0xA643, 0xA642}, /* A642 */
3750 {0xA644, 0xA645, 0xA644}, {0xA644, 0xA645, 0xA644}, /* A644 */
3751 {0xA646, 0xA647, 0xA646}, {0xA646, 0xA647, 0xA646}, /* A646 */
3752 {0xA648, 0xA649, 0xA648}, {0xA648, 0xA649, 0xA648}, /* A648 */
3753 {0xA64A, 0xA64B, 0xA64A}, {0xA64A, 0xA64B, 0xA64A}, /* A64A */
3754 {0xA64C, 0xA64D, 0xA64C}, {0xA64C, 0xA64D, 0xA64C}, /* A64C */
3755 {0xA64E, 0xA64F, 0xA64E}, {0xA64E, 0xA64F, 0xA64E}, /* A64E */
3756 {0xA650, 0xA651, 0xA650}, {0xA650, 0xA651, 0xA650}, /* A650 */
3757 {0xA652, 0xA653, 0xA652}, {0xA652, 0xA653, 0xA652}, /* A652 */
3758 {0xA654, 0xA655, 0xA654}, {0xA654, 0xA655, 0xA654}, /* A654 */
3759 {0xA656, 0xA657, 0xA656}, {0xA656, 0xA657, 0xA656}, /* A656 */
3760 {0xA658, 0xA659, 0xA658}, {0xA658, 0xA659, 0xA658}, /* A658 */
3761 {0xA65A, 0xA65B, 0xA65A}, {0xA65A, 0xA65B, 0xA65A}, /* A65A */
3762 {0xA65C, 0xA65D, 0xA65C}, {0xA65C, 0xA65D, 0xA65C}, /* A65C */
3763 {0xA65E, 0xA65F, 0xA65E}, {0xA65E, 0xA65F, 0xA65E}, /* A65E */
3764 {0xA660, 0xA660, 0xA660}, {0xA661, 0xA661, 0xA661}, /* A660 */
3765 {0xA662, 0xA663, 0xA662}, {0xA662, 0xA663, 0xA662}, /* A662 */
3766 {0xA664, 0xA665, 0xA664}, {0xA664, 0xA665, 0xA664}, /* A664 */
3767 {0xA666, 0xA667, 0xA666}, {0xA666, 0xA667, 0xA666}, /* A666 */
3768 {0xA668, 0xA669, 0xA668}, {0xA668, 0xA669, 0xA668}, /* A668 */
3769 {0xA66A, 0xA66B, 0xA66A}, {0xA66A, 0xA66B, 0xA66A}, /* A66A */
3770 {0xA66C, 0xA66D, 0xA66C}, {0xA66C, 0xA66D, 0xA66C}, /* A66C */
3771 {0xA66E, 0xA66E, 0xA66E}, {0xA66F, 0xA66F, 0xA66F}, /* A66E */
3772 {0xA670, 0xA670, 0xA670}, {0xA671, 0xA671, 0xA671}, /* A670 */
3773 {0xA672, 0xA672, 0xA672}, {0xA673, 0xA673, 0xA673}, /* A672 */
3774 {0xA674, 0xA674, 0xA674}, {0xA675, 0xA675, 0xA675}, /* A674 */
3775 {0xA676, 0xA676, 0xA676}, {0xA677, 0xA677, 0xA677}, /* A676 */
3776 {0xA678, 0xA678, 0xA678}, {0xA679, 0xA679, 0xA679}, /* A678 */
3777 {0xA67A, 0xA67A, 0xA67A}, {0xA67B, 0xA67B, 0xA67B}, /* A67A */
3778 {0xA67C, 0xA67C, 0xA67C}, {0xA67D, 0xA67D, 0xA67D}, /* A67C */
3779 {0xA67E, 0xA67E, 0xA67E}, {0xA67F, 0xA67F, 0xA67F}, /* A67E */
3780 {0xA680, 0xA681, 0xA680}, {0xA680, 0xA681, 0xA680}, /* A680 */
3781 {0xA682, 0xA683, 0xA682}, {0xA682, 0xA683, 0xA682}, /* A682 */
3782 {0xA684, 0xA685, 0xA684}, {0xA684, 0xA685, 0xA684}, /* A684 */
3783 {0xA686, 0xA687, 0xA686}, {0xA686, 0xA687, 0xA686}, /* A686 */
3784 {0xA688, 0xA689, 0xA688}, {0xA688, 0xA689, 0xA688}, /* A688 */
3785 {0xA68A, 0xA68B, 0xA68A}, {0xA68A, 0xA68B, 0xA68A}, /* A68A */
3786 {0xA68C, 0xA68D, 0xA68C}, {0xA68C, 0xA68D, 0xA68C}, /* A68C */
3787 {0xA68E, 0xA68F, 0xA68E}, {0xA68E, 0xA68F, 0xA68E}, /* A68E */
3788 {0xA690, 0xA691, 0xA690}, {0xA690, 0xA691, 0xA690}, /* A690 */
3789 {0xA692, 0xA693, 0xA692}, {0xA692, 0xA693, 0xA692}, /* A692 */
3790 {0xA694, 0xA695, 0xA694}, {0xA694, 0xA695, 0xA694}, /* A694 */
3791 {0xA696, 0xA697, 0xA696}, {0xA696, 0xA697, 0xA696}, /* A696 */
3792 {0xA698, 0xA698, 0xA698}, {0xA699, 0xA699, 0xA699}, /* A698 */
3793 {0xA69A, 0xA69A, 0xA69A}, {0xA69B, 0xA69B, 0xA69B}, /* A69A */
3794 {0xA69C, 0xA69C, 0xA69C}, {0xA69D, 0xA69D, 0xA69D}, /* A69C */
3795 {0xA69E, 0xA69E, 0xA69E}, {0xA69F, 0xA69F, 0xA69F}, /* A69E */
3796 {0xA6A0, 0xA6A0, 0xA6A0}, {0xA6A1, 0xA6A1, 0xA6A1}, /* A6A0 */
3797 {0xA6A2, 0xA6A2, 0xA6A2}, {0xA6A3, 0xA6A3, 0xA6A3}, /* A6A2 */
3798 {0xA6A4, 0xA6A4, 0xA6A4}, {0xA6A5, 0xA6A5, 0xA6A5}, /* A6A4 */
3799 {0xA6A6, 0xA6A6, 0xA6A6}, {0xA6A7, 0xA6A7, 0xA6A7}, /* A6A6 */
3800 {0xA6A8, 0xA6A8, 0xA6A8}, {0xA6A9, 0xA6A9, 0xA6A9}, /* A6A8 */
3801 {0xA6AA, 0xA6AA, 0xA6AA}, {0xA6AB, 0xA6AB, 0xA6AB}, /* A6AA */
3802 {0xA6AC, 0xA6AC, 0xA6AC}, {0xA6AD, 0xA6AD, 0xA6AD}, /* A6AC */
3803 {0xA6AE, 0xA6AE, 0xA6AE}, {0xA6AF, 0xA6AF, 0xA6AF}, /* A6AE */
3804 {0xA6B0, 0xA6B0, 0xA6B0}, {0xA6B1, 0xA6B1, 0xA6B1}, /* A6B0 */
3805 {0xA6B2, 0xA6B2, 0xA6B2}, {0xA6B3, 0xA6B3, 0xA6B3}, /* A6B2 */
3806 {0xA6B4, 0xA6B4, 0xA6B4}, {0xA6B5, 0xA6B5, 0xA6B5}, /* A6B4 */
3807 {0xA6B6, 0xA6B6, 0xA6B6}, {0xA6B7, 0xA6B7, 0xA6B7}, /* A6B6 */
3808 {0xA6B8, 0xA6B8, 0xA6B8}, {0xA6B9, 0xA6B9, 0xA6B9}, /* A6B8 */
3809 {0xA6BA, 0xA6BA, 0xA6BA}, {0xA6BB, 0xA6BB, 0xA6BB}, /* A6BA */
3810 {0xA6BC, 0xA6BC, 0xA6BC}, {0xA6BD, 0xA6BD, 0xA6BD}, /* A6BC */
3811 {0xA6BE, 0xA6BE, 0xA6BE}, {0xA6BF, 0xA6BF, 0xA6BF}, /* A6BE */
3812 {0xA6C0, 0xA6C0, 0xA6C0}, {0xA6C1, 0xA6C1, 0xA6C1}, /* A6C0 */
3813 {0xA6C2, 0xA6C2, 0xA6C2}, {0xA6C3, 0xA6C3, 0xA6C3}, /* A6C2 */
3814 {0xA6C4, 0xA6C4, 0xA6C4}, {0xA6C5, 0xA6C5, 0xA6C5}, /* A6C4 */
3815 {0xA6C6, 0xA6C6, 0xA6C6}, {0xA6C7, 0xA6C7, 0xA6C7}, /* A6C6 */
3816 {0xA6C8, 0xA6C8, 0xA6C8}, {0xA6C9, 0xA6C9, 0xA6C9}, /* A6C8 */
3817 {0xA6CA, 0xA6CA, 0xA6CA}, {0xA6CB, 0xA6CB, 0xA6CB}, /* A6CA */
3818 {0xA6CC, 0xA6CC, 0xA6CC}, {0xA6CD, 0xA6CD, 0xA6CD}, /* A6CC */
3819 {0xA6CE, 0xA6CE, 0xA6CE}, {0xA6CF, 0xA6CF, 0xA6CF}, /* A6CE */
3820 {0xA6D0, 0xA6D0, 0xA6D0}, {0xA6D1, 0xA6D1, 0xA6D1}, /* A6D0 */
3821 {0xA6D2, 0xA6D2, 0xA6D2}, {0xA6D3, 0xA6D3, 0xA6D3}, /* A6D2 */
3822 {0xA6D4, 0xA6D4, 0xA6D4}, {0xA6D5, 0xA6D5, 0xA6D5}, /* A6D4 */
3823 {0xA6D6, 0xA6D6, 0xA6D6}, {0xA6D7, 0xA6D7, 0xA6D7}, /* A6D6 */
3824 {0xA6D8, 0xA6D8, 0xA6D8}, {0xA6D9, 0xA6D9, 0xA6D9}, /* A6D8 */
3825 {0xA6DA, 0xA6DA, 0xA6DA}, {0xA6DB, 0xA6DB, 0xA6DB}, /* A6DA */
3826 {0xA6DC, 0xA6DC, 0xA6DC}, {0xA6DD, 0xA6DD, 0xA6DD}, /* A6DC */
3827 {0xA6DE, 0xA6DE, 0xA6DE}, {0xA6DF, 0xA6DF, 0xA6DF}, /* A6DE */
3828 {0xA6E0, 0xA6E0, 0xA6E0}, {0xA6E1, 0xA6E1, 0xA6E1}, /* A6E0 */
3829 {0xA6E2, 0xA6E2, 0xA6E2}, {0xA6E3, 0xA6E3, 0xA6E3}, /* A6E2 */
3830 {0xA6E4, 0xA6E4, 0xA6E4}, {0xA6E5, 0xA6E5, 0xA6E5}, /* A6E4 */
3831 {0xA6E6, 0xA6E6, 0xA6E6}, {0xA6E7, 0xA6E7, 0xA6E7}, /* A6E6 */
3832 {0xA6E8, 0xA6E8, 0xA6E8}, {0xA6E9, 0xA6E9, 0xA6E9}, /* A6E8 */
3833 {0xA6EA, 0xA6EA, 0xA6EA}, {0xA6EB, 0xA6EB, 0xA6EB}, /* A6EA */
3834 {0xA6EC, 0xA6EC, 0xA6EC}, {0xA6ED, 0xA6ED, 0xA6ED}, /* A6EC */
3835 {0xA6EE, 0xA6EE, 0xA6EE}, {0xA6EF, 0xA6EF, 0xA6EF}, /* A6EE */
3836 {0xA6F0, 0xA6F0, 0xA6F0}, {0xA6F1, 0xA6F1, 0xA6F1}, /* A6F0 */
3837 {0xA6F2, 0xA6F2, 0xA6F2}, {0xA6F3, 0xA6F3, 0xA6F3}, /* A6F2 */
3838 {0xA6F4, 0xA6F4, 0xA6F4}, {0xA6F5, 0xA6F5, 0xA6F5}, /* A6F4 */
3839 {0xA6F6, 0xA6F6, 0xA6F6}, {0xA6F7, 0xA6F7, 0xA6F7}, /* A6F6 */
3840 {0xA6F8, 0xA6F8, 0xA6F8}, {0xA6F9, 0xA6F9, 0xA6F9}, /* A6F8 */
3841 {0xA6FA, 0xA6FA, 0xA6FA}, {0xA6FB, 0xA6FB, 0xA6FB}, /* A6FA */
3842 {0xA6FC, 0xA6FC, 0xA6FC}, {0xA6FD, 0xA6FD, 0xA6FD}, /* A6FC */
3843 {0xA6FE, 0xA6FE, 0xA6FE}, {0xA6FF, 0xA6FF, 0xA6FF} /* A6FE */
3844 };
3845
3846 static const MY_UNICASE_CHARACTER u520pA7[] = {
3847 {0xA700, 0xA700, 0xA700}, {0xA701, 0xA701, 0xA701}, /* A700 */
3848 {0xA702, 0xA702, 0xA702}, {0xA703, 0xA703, 0xA703}, /* A702 */
3849 {0xA704, 0xA704, 0xA704}, {0xA705, 0xA705, 0xA705}, /* A704 */
3850 {0xA706, 0xA706, 0xA706}, {0xA707, 0xA707, 0xA707}, /* A706 */
3851 {0xA708, 0xA708, 0xA708}, {0xA709, 0xA709, 0xA709}, /* A708 */
3852 {0xA70A, 0xA70A, 0xA70A}, {0xA70B, 0xA70B, 0xA70B}, /* A70A */
3853 {0xA70C, 0xA70C, 0xA70C}, {0xA70D, 0xA70D, 0xA70D}, /* A70C */
3854 {0xA70E, 0xA70E, 0xA70E}, {0xA70F, 0xA70F, 0xA70F}, /* A70E */
3855 {0xA710, 0xA710, 0xA710}, {0xA711, 0xA711, 0xA711}, /* A710 */
3856 {0xA712, 0xA712, 0xA712}, {0xA713, 0xA713, 0xA713}, /* A712 */
3857 {0xA714, 0xA714, 0xA714}, {0xA715, 0xA715, 0xA715}, /* A714 */
3858 {0xA716, 0xA716, 0xA716}, {0xA717, 0xA717, 0xA717}, /* A716 */
3859 {0xA718, 0xA718, 0xA718}, {0xA719, 0xA719, 0xA719}, /* A718 */
3860 {0xA71A, 0xA71A, 0xA71A}, {0xA71B, 0xA71B, 0xA71B}, /* A71A */
3861 {0xA71C, 0xA71C, 0xA71C}, {0xA71D, 0xA71D, 0xA71D}, /* A71C */
3862 {0xA71E, 0xA71E, 0xA71E}, {0xA71F, 0xA71F, 0xA71F}, /* A71E */
3863 {0xA720, 0xA720, 0xA720}, {0xA721, 0xA721, 0xA721}, /* A720 */
3864 {0xA722, 0xA723, 0xA722}, {0xA722, 0xA723, 0xA722}, /* A722 */
3865 {0xA724, 0xA725, 0xA724}, {0xA724, 0xA725, 0xA724}, /* A724 */
3866 {0xA726, 0xA727, 0xA726}, {0xA726, 0xA727, 0xA726}, /* A726 */
3867 {0xA728, 0xA729, 0xA728}, {0xA728, 0xA729, 0xA728}, /* A728 */
3868 {0xA72A, 0xA72B, 0xA72A}, {0xA72A, 0xA72B, 0xA72A}, /* A72A */
3869 {0xA72C, 0xA72D, 0xA72C}, {0xA72C, 0xA72D, 0xA72C}, /* A72C */
3870 {0xA72E, 0xA72F, 0xA72E}, {0xA72E, 0xA72F, 0xA72E}, /* A72E */
3871 {0xA730, 0xA730, 0xA730}, {0xA731, 0xA731, 0xA731}, /* A730 */
3872 {0xA732, 0xA733, 0xA732}, {0xA732, 0xA733, 0xA732}, /* A732 */
3873 {0xA734, 0xA735, 0xA734}, {0xA734, 0xA735, 0xA734}, /* A734 */
3874 {0xA736, 0xA737, 0xA736}, {0xA736, 0xA737, 0xA736}, /* A736 */
3875 {0xA738, 0xA739, 0xA738}, {0xA738, 0xA739, 0xA738}, /* A738 */
3876 {0xA73A, 0xA73B, 0xA73A}, {0xA73A, 0xA73B, 0xA73A}, /* A73A */
3877 {0xA73C, 0xA73D, 0xA73C}, {0xA73C, 0xA73D, 0xA73C}, /* A73C */
3878 {0xA73E, 0xA73F, 0xA73E}, {0xA73E, 0xA73F, 0xA73E}, /* A73E */
3879 {0xA740, 0xA741, 0xA740}, {0xA740, 0xA741, 0xA740}, /* A740 */
3880 {0xA742, 0xA743, 0xA742}, {0xA742, 0xA743, 0xA742}, /* A742 */
3881 {0xA744, 0xA745, 0xA744}, {0xA744, 0xA745, 0xA744}, /* A744 */
3882 {0xA746, 0xA747, 0xA746}, {0xA746, 0xA747, 0xA746}, /* A746 */
3883 {0xA748, 0xA749, 0xA748}, {0xA748, 0xA749, 0xA748}, /* A748 */
3884 {0xA74A, 0xA74B, 0xA74A}, {0xA74A, 0xA74B, 0xA74A}, /* A74A */
3885 {0xA74C, 0xA74D, 0xA74C}, {0xA74C, 0xA74D, 0xA74C}, /* A74C */
3886 {0xA74E, 0xA74F, 0xA74E}, {0xA74E, 0xA74F, 0xA74E}, /* A74E */
3887 {0xA750, 0xA751, 0xA750}, {0xA750, 0xA751, 0xA750}, /* A750 */
3888 {0xA752, 0xA753, 0xA752}, {0xA752, 0xA753, 0xA752}, /* A752 */
3889 {0xA754, 0xA755, 0xA754}, {0xA754, 0xA755, 0xA754}, /* A754 */
3890 {0xA756, 0xA757, 0xA756}, {0xA756, 0xA757, 0xA756}, /* A756 */
3891 {0xA758, 0xA759, 0xA758}, {0xA758, 0xA759, 0xA758}, /* A758 */
3892 {0xA75A, 0xA75B, 0xA75A}, {0xA75A, 0xA75B, 0xA75A}, /* A75A */
3893 {0xA75C, 0xA75D, 0xA75C}, {0xA75C, 0xA75D, 0xA75C}, /* A75C */
3894 {0xA75E, 0xA75F, 0xA75E}, {0xA75E, 0xA75F, 0xA75E}, /* A75E */
3895 {0xA760, 0xA761, 0xA760}, {0xA760, 0xA761, 0xA760}, /* A760 */
3896 {0xA762, 0xA763, 0xA762}, {0xA762, 0xA763, 0xA762}, /* A762 */
3897 {0xA764, 0xA765, 0xA764}, {0xA764, 0xA765, 0xA764}, /* A764 */
3898 {0xA766, 0xA767, 0xA766}, {0xA766, 0xA767, 0xA766}, /* A766 */
3899 {0xA768, 0xA769, 0xA768}, {0xA768, 0xA769, 0xA768}, /* A768 */
3900 {0xA76A, 0xA76B, 0xA76A}, {0xA76A, 0xA76B, 0xA76A}, /* A76A */
3901 {0xA76C, 0xA76D, 0xA76C}, {0xA76C, 0xA76D, 0xA76C}, /* A76C */
3902 {0xA76E, 0xA76F, 0xA76E}, {0xA76E, 0xA76F, 0xA76E}, /* A76E */
3903 {0xA770, 0xA770, 0xA770}, {0xA771, 0xA771, 0xA771}, /* A770 */
3904 {0xA772, 0xA772, 0xA772}, {0xA773, 0xA773, 0xA773}, /* A772 */
3905 {0xA774, 0xA774, 0xA774}, {0xA775, 0xA775, 0xA775}, /* A774 */
3906 {0xA776, 0xA776, 0xA776}, {0xA777, 0xA777, 0xA777}, /* A776 */
3907 {0xA778, 0xA778, 0xA778}, {0xA779, 0xA77A, 0xA779}, /* A778 */
3908 {0xA779, 0xA77A, 0xA779}, {0xA77B, 0xA77C, 0xA77B}, /* A77A */
3909 {0xA77B, 0xA77C, 0xA77B}, {0xA77D, 0x1D79, 0xA77D}, /* A77C */
3910 {0xA77E, 0xA77F, 0xA77E}, {0xA77E, 0xA77F, 0xA77E}, /* A77E */
3911 {0xA780, 0xA781, 0xA780}, {0xA780, 0xA781, 0xA780}, /* A780 */
3912 {0xA782, 0xA783, 0xA782}, {0xA782, 0xA783, 0xA782}, /* A782 */
3913 {0xA784, 0xA785, 0xA784}, {0xA784, 0xA785, 0xA784}, /* A784 */
3914 {0xA786, 0xA787, 0xA786}, {0xA786, 0xA787, 0xA786}, /* A786 */
3915 {0xA788, 0xA788, 0xA788}, {0xA789, 0xA789, 0xA789}, /* A788 */
3916 {0xA78A, 0xA78A, 0xA78A}, {0xA78B, 0xA78C, 0xA78B}, /* A78A */
3917 {0xA78B, 0xA78C, 0xA78B}, {0xA78D, 0xA78D, 0xA78D}, /* A78C */
3918 {0xA78E, 0xA78E, 0xA78E}, {0xA78F, 0xA78F, 0xA78F}, /* A78E */
3919 {0xA790, 0xA790, 0xA790}, {0xA791, 0xA791, 0xA791}, /* A790 */
3920 {0xA792, 0xA792, 0xA792}, {0xA793, 0xA793, 0xA793}, /* A792 */
3921 {0xA794, 0xA794, 0xA794}, {0xA795, 0xA795, 0xA795}, /* A794 */
3922 {0xA796, 0xA796, 0xA796}, {0xA797, 0xA797, 0xA797}, /* A796 */
3923 {0xA798, 0xA798, 0xA798}, {0xA799, 0xA799, 0xA799}, /* A798 */
3924 {0xA79A, 0xA79A, 0xA79A}, {0xA79B, 0xA79B, 0xA79B}, /* A79A */
3925 {0xA79C, 0xA79C, 0xA79C}, {0xA79D, 0xA79D, 0xA79D}, /* A79C */
3926 {0xA79E, 0xA79E, 0xA79E}, {0xA79F, 0xA79F, 0xA79F}, /* A79E */
3927 {0xA7A0, 0xA7A0, 0xA7A0}, {0xA7A1, 0xA7A1, 0xA7A1}, /* A7A0 */
3928 {0xA7A2, 0xA7A2, 0xA7A2}, {0xA7A3, 0xA7A3, 0xA7A3}, /* A7A2 */
3929 {0xA7A4, 0xA7A4, 0xA7A4}, {0xA7A5, 0xA7A5, 0xA7A5}, /* A7A4 */
3930 {0xA7A6, 0xA7A6, 0xA7A6}, {0xA7A7, 0xA7A7, 0xA7A7}, /* A7A6 */
3931 {0xA7A8, 0xA7A8, 0xA7A8}, {0xA7A9, 0xA7A9, 0xA7A9}, /* A7A8 */
3932 {0xA7AA, 0xA7AA, 0xA7AA}, {0xA7AB, 0xA7AB, 0xA7AB}, /* A7AA */
3933 {0xA7AC, 0xA7AC, 0xA7AC}, {0xA7AD, 0xA7AD, 0xA7AD}, /* A7AC */
3934 {0xA7AE, 0xA7AE, 0xA7AE}, {0xA7AF, 0xA7AF, 0xA7AF}, /* A7AE */
3935 {0xA7B0, 0xA7B0, 0xA7B0}, {0xA7B1, 0xA7B1, 0xA7B1}, /* A7B0 */
3936 {0xA7B2, 0xA7B2, 0xA7B2}, {0xA7B3, 0xA7B3, 0xA7B3}, /* A7B2 */
3937 {0xA7B4, 0xA7B4, 0xA7B4}, {0xA7B5, 0xA7B5, 0xA7B5}, /* A7B4 */
3938 {0xA7B6, 0xA7B6, 0xA7B6}, {0xA7B7, 0xA7B7, 0xA7B7}, /* A7B6 */
3939 {0xA7B8, 0xA7B8, 0xA7B8}, {0xA7B9, 0xA7B9, 0xA7B9}, /* A7B8 */
3940 {0xA7BA, 0xA7BA, 0xA7BA}, {0xA7BB, 0xA7BB, 0xA7BB}, /* A7BA */
3941 {0xA7BC, 0xA7BC, 0xA7BC}, {0xA7BD, 0xA7BD, 0xA7BD}, /* A7BC */
3942 {0xA7BE, 0xA7BE, 0xA7BE}, {0xA7BF, 0xA7BF, 0xA7BF}, /* A7BE */
3943 {0xA7C0, 0xA7C0, 0xA7C0}, {0xA7C1, 0xA7C1, 0xA7C1}, /* A7C0 */
3944 {0xA7C2, 0xA7C2, 0xA7C2}, {0xA7C3, 0xA7C3, 0xA7C3}, /* A7C2 */
3945 {0xA7C4, 0xA7C4, 0xA7C4}, {0xA7C5, 0xA7C5, 0xA7C5}, /* A7C4 */
3946 {0xA7C6, 0xA7C6, 0xA7C6}, {0xA7C7, 0xA7C7, 0xA7C7}, /* A7C6 */
3947 {0xA7C8, 0xA7C8, 0xA7C8}, {0xA7C9, 0xA7C9, 0xA7C9}, /* A7C8 */
3948 {0xA7CA, 0xA7CA, 0xA7CA}, {0xA7CB, 0xA7CB, 0xA7CB}, /* A7CA */
3949 {0xA7CC, 0xA7CC, 0xA7CC}, {0xA7CD, 0xA7CD, 0xA7CD}, /* A7CC */
3950 {0xA7CE, 0xA7CE, 0xA7CE}, {0xA7CF, 0xA7CF, 0xA7CF}, /* A7CE */
3951 {0xA7D0, 0xA7D0, 0xA7D0}, {0xA7D1, 0xA7D1, 0xA7D1}, /* A7D0 */
3952 {0xA7D2, 0xA7D2, 0xA7D2}, {0xA7D3, 0xA7D3, 0xA7D3}, /* A7D2 */
3953 {0xA7D4, 0xA7D4, 0xA7D4}, {0xA7D5, 0xA7D5, 0xA7D5}, /* A7D4 */
3954 {0xA7D6, 0xA7D6, 0xA7D6}, {0xA7D7, 0xA7D7, 0xA7D7}, /* A7D6 */
3955 {0xA7D8, 0xA7D8, 0xA7D8}, {0xA7D9, 0xA7D9, 0xA7D9}, /* A7D8 */
3956 {0xA7DA, 0xA7DA, 0xA7DA}, {0xA7DB, 0xA7DB, 0xA7DB}, /* A7DA */
3957 {0xA7DC, 0xA7DC, 0xA7DC}, {0xA7DD, 0xA7DD, 0xA7DD}, /* A7DC */
3958 {0xA7DE, 0xA7DE, 0xA7DE}, {0xA7DF, 0xA7DF, 0xA7DF}, /* A7DE */
3959 {0xA7E0, 0xA7E0, 0xA7E0}, {0xA7E1, 0xA7E1, 0xA7E1}, /* A7E0 */
3960 {0xA7E2, 0xA7E2, 0xA7E2}, {0xA7E3, 0xA7E3, 0xA7E3}, /* A7E2 */
3961 {0xA7E4, 0xA7E4, 0xA7E4}, {0xA7E5, 0xA7E5, 0xA7E5}, /* A7E4 */
3962 {0xA7E6, 0xA7E6, 0xA7E6}, {0xA7E7, 0xA7E7, 0xA7E7}, /* A7E6 */
3963 {0xA7E8, 0xA7E8, 0xA7E8}, {0xA7E9, 0xA7E9, 0xA7E9}, /* A7E8 */
3964 {0xA7EA, 0xA7EA, 0xA7EA}, {0xA7EB, 0xA7EB, 0xA7EB}, /* A7EA */
3965 {0xA7EC, 0xA7EC, 0xA7EC}, {0xA7ED, 0xA7ED, 0xA7ED}, /* A7EC */
3966 {0xA7EE, 0xA7EE, 0xA7EE}, {0xA7EF, 0xA7EF, 0xA7EF}, /* A7EE */
3967 {0xA7F0, 0xA7F0, 0xA7F0}, {0xA7F1, 0xA7F1, 0xA7F1}, /* A7F0 */
3968 {0xA7F2, 0xA7F2, 0xA7F2}, {0xA7F3, 0xA7F3, 0xA7F3}, /* A7F2 */
3969 {0xA7F4, 0xA7F4, 0xA7F4}, {0xA7F5, 0xA7F5, 0xA7F5}, /* A7F4 */
3970 {0xA7F6, 0xA7F6, 0xA7F6}, {0xA7F7, 0xA7F7, 0xA7F7}, /* A7F6 */
3971 {0xA7F8, 0xA7F8, 0xA7F8}, {0xA7F9, 0xA7F9, 0xA7F9}, /* A7F8 */
3972 {0xA7FA, 0xA7FA, 0xA7FA}, {0xA7FB, 0xA7FB, 0xA7FB}, /* A7FA */
3973 {0xA7FC, 0xA7FC, 0xA7FC}, {0xA7FD, 0xA7FD, 0xA7FD}, /* A7FC */
3974 {0xA7FE, 0xA7FE, 0xA7FE}, {0xA7FF, 0xA7FF, 0xA7FF} /* A7FE */
3975 };
3976
3977 static const MY_UNICASE_CHARACTER u520pFF[] = {
3978 {0xFF00, 0xFF00, 0xFF00}, {0xFF01, 0xFF01, 0xFF01}, /* FF00 */
3979 {0xFF02, 0xFF02, 0xFF02}, {0xFF03, 0xFF03, 0xFF03}, /* FF02 */
3980 {0xFF04, 0xFF04, 0xFF04}, {0xFF05, 0xFF05, 0xFF05}, /* FF04 */
3981 {0xFF06, 0xFF06, 0xFF06}, {0xFF07, 0xFF07, 0xFF07}, /* FF06 */
3982 {0xFF08, 0xFF08, 0xFF08}, {0xFF09, 0xFF09, 0xFF09}, /* FF08 */
3983 {0xFF0A, 0xFF0A, 0xFF0A}, {0xFF0B, 0xFF0B, 0xFF0B}, /* FF0A */
3984 {0xFF0C, 0xFF0C, 0xFF0C}, {0xFF0D, 0xFF0D, 0xFF0D}, /* FF0C */
3985 {0xFF0E, 0xFF0E, 0xFF0E}, {0xFF0F, 0xFF0F, 0xFF0F}, /* FF0E */
3986 {0xFF10, 0xFF10, 0xFF10}, {0xFF11, 0xFF11, 0xFF11}, /* FF10 */
3987 {0xFF12, 0xFF12, 0xFF12}, {0xFF13, 0xFF13, 0xFF13}, /* FF12 */
3988 {0xFF14, 0xFF14, 0xFF14}, {0xFF15, 0xFF15, 0xFF15}, /* FF14 */
3989 {0xFF16, 0xFF16, 0xFF16}, {0xFF17, 0xFF17, 0xFF17}, /* FF16 */
3990 {0xFF18, 0xFF18, 0xFF18}, {0xFF19, 0xFF19, 0xFF19}, /* FF18 */
3991 {0xFF1A, 0xFF1A, 0xFF1A}, {0xFF1B, 0xFF1B, 0xFF1B}, /* FF1A */
3992 {0xFF1C, 0xFF1C, 0xFF1C}, {0xFF1D, 0xFF1D, 0xFF1D}, /* FF1C */
3993 {0xFF1E, 0xFF1E, 0xFF1E}, {0xFF1F, 0xFF1F, 0xFF1F}, /* FF1E */
3994 {0xFF20, 0xFF20, 0xFF20}, {0xFF21, 0xFF41, 0xFF21}, /* FF20 */
3995 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23}, /* FF22 */
3996 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25}, /* FF24 */
3997 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27}, /* FF26 */
3998 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29}, /* FF28 */
3999 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B}, /* FF2A */
4000 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D}, /* FF2C */
4001 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F}, /* FF2E */
4002 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31}, /* FF30 */
4003 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33}, /* FF32 */
4004 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35}, /* FF34 */
4005 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37}, /* FF36 */
4006 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39}, /* FF38 */
4007 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF3B, 0xFF3B, 0xFF3B}, /* FF3A */
4008 {0xFF3C, 0xFF3C, 0xFF3C}, {0xFF3D, 0xFF3D, 0xFF3D}, /* FF3C */
4009 {0xFF3E, 0xFF3E, 0xFF3E}, {0xFF3F, 0xFF3F, 0xFF3F}, /* FF3E */
4010 {0xFF40, 0xFF40, 0xFF40}, {0xFF21, 0xFF41, 0xFF21}, /* FF40 */
4011 {0xFF22, 0xFF42, 0xFF22}, {0xFF23, 0xFF43, 0xFF23}, /* FF42 */
4012 {0xFF24, 0xFF44, 0xFF24}, {0xFF25, 0xFF45, 0xFF25}, /* FF44 */
4013 {0xFF26, 0xFF46, 0xFF26}, {0xFF27, 0xFF47, 0xFF27}, /* FF46 */
4014 {0xFF28, 0xFF48, 0xFF28}, {0xFF29, 0xFF49, 0xFF29}, /* FF48 */
4015 {0xFF2A, 0xFF4A, 0xFF2A}, {0xFF2B, 0xFF4B, 0xFF2B}, /* FF4A */
4016 {0xFF2C, 0xFF4C, 0xFF2C}, {0xFF2D, 0xFF4D, 0xFF2D}, /* FF4C */
4017 {0xFF2E, 0xFF4E, 0xFF2E}, {0xFF2F, 0xFF4F, 0xFF2F}, /* FF4E */
4018 {0xFF30, 0xFF50, 0xFF30}, {0xFF31, 0xFF51, 0xFF31}, /* FF50 */
4019 {0xFF32, 0xFF52, 0xFF32}, {0xFF33, 0xFF53, 0xFF33}, /* FF52 */
4020 {0xFF34, 0xFF54, 0xFF34}, {0xFF35, 0xFF55, 0xFF35}, /* FF54 */
4021 {0xFF36, 0xFF56, 0xFF36}, {0xFF37, 0xFF57, 0xFF37}, /* FF56 */
4022 {0xFF38, 0xFF58, 0xFF38}, {0xFF39, 0xFF59, 0xFF39}, /* FF58 */
4023 {0xFF3A, 0xFF5A, 0xFF3A}, {0xFF5B, 0xFF5B, 0xFF5B}, /* FF5A */
4024 {0xFF5C, 0xFF5C, 0xFF5C}, {0xFF5D, 0xFF5D, 0xFF5D}, /* FF5C */
4025 {0xFF5E, 0xFF5E, 0xFF5E}, {0xFF5F, 0xFF5F, 0xFF5F}, /* FF5E */
4026 {0xFF60, 0xFF60, 0xFF60}, {0xFF61, 0xFF61, 0xFF61}, /* FF60 */
4027 {0xFF62, 0xFF62, 0xFF62}, {0xFF63, 0xFF63, 0xFF63}, /* FF62 */
4028 {0xFF64, 0xFF64, 0xFF64}, {0xFF65, 0xFF65, 0xFF65}, /* FF64 */
4029 {0xFF66, 0xFF66, 0xFF66}, {0xFF67, 0xFF67, 0xFF67}, /* FF66 */
4030 {0xFF68, 0xFF68, 0xFF68}, {0xFF69, 0xFF69, 0xFF69}, /* FF68 */
4031 {0xFF6A, 0xFF6A, 0xFF6A}, {0xFF6B, 0xFF6B, 0xFF6B}, /* FF6A */
4032 {0xFF6C, 0xFF6C, 0xFF6C}, {0xFF6D, 0xFF6D, 0xFF6D}, /* FF6C */
4033 {0xFF6E, 0xFF6E, 0xFF6E}, {0xFF6F, 0xFF6F, 0xFF6F}, /* FF6E */
4034 {0xFF70, 0xFF70, 0xFF70}, {0xFF71, 0xFF71, 0xFF71}, /* FF70 */
4035 {0xFF72, 0xFF72, 0xFF72}, {0xFF73, 0xFF73, 0xFF73}, /* FF72 */
4036 {0xFF74, 0xFF74, 0xFF74}, {0xFF75, 0xFF75, 0xFF75}, /* FF74 */
4037 {0xFF76, 0xFF76, 0xFF76}, {0xFF77, 0xFF77, 0xFF77}, /* FF76 */
4038 {0xFF78, 0xFF78, 0xFF78}, {0xFF79, 0xFF79, 0xFF79}, /* FF78 */
4039 {0xFF7A, 0xFF7A, 0xFF7A}, {0xFF7B, 0xFF7B, 0xFF7B}, /* FF7A */
4040 {0xFF7C, 0xFF7C, 0xFF7C}, {0xFF7D, 0xFF7D, 0xFF7D}, /* FF7C */
4041 {0xFF7E, 0xFF7E, 0xFF7E}, {0xFF7F, 0xFF7F, 0xFF7F}, /* FF7E */
4042 {0xFF80, 0xFF80, 0xFF80}, {0xFF81, 0xFF81, 0xFF81}, /* FF80 */
4043 {0xFF82, 0xFF82, 0xFF82}, {0xFF83, 0xFF83, 0xFF83}, /* FF82 */
4044 {0xFF84, 0xFF84, 0xFF84}, {0xFF85, 0xFF85, 0xFF85}, /* FF84 */
4045 {0xFF86, 0xFF86, 0xFF86}, {0xFF87, 0xFF87, 0xFF87}, /* FF86 */
4046 {0xFF88, 0xFF88, 0xFF88}, {0xFF89, 0xFF89, 0xFF89}, /* FF88 */
4047 {0xFF8A, 0xFF8A, 0xFF8A}, {0xFF8B, 0xFF8B, 0xFF8B}, /* FF8A */
4048 {0xFF8C, 0xFF8C, 0xFF8C}, {0xFF8D, 0xFF8D, 0xFF8D}, /* FF8C */
4049 {0xFF8E, 0xFF8E, 0xFF8E}, {0xFF8F, 0xFF8F, 0xFF8F}, /* FF8E */
4050 {0xFF90, 0xFF90, 0xFF90}, {0xFF91, 0xFF91, 0xFF91}, /* FF90 */
4051 {0xFF92, 0xFF92, 0xFF92}, {0xFF93, 0xFF93, 0xFF93}, /* FF92 */
4052 {0xFF94, 0xFF94, 0xFF94}, {0xFF95, 0xFF95, 0xFF95}, /* FF94 */
4053 {0xFF96, 0xFF96, 0xFF96}, {0xFF97, 0xFF97, 0xFF97}, /* FF96 */
4054 {0xFF98, 0xFF98, 0xFF98}, {0xFF99, 0xFF99, 0xFF99}, /* FF98 */
4055 {0xFF9A, 0xFF9A, 0xFF9A}, {0xFF9B, 0xFF9B, 0xFF9B}, /* FF9A */
4056 {0xFF9C, 0xFF9C, 0xFF9C}, {0xFF9D, 0xFF9D, 0xFF9D}, /* FF9C */
4057 {0xFF9E, 0xFF9E, 0xFF9E}, {0xFF9F, 0xFF9F, 0xFF9F}, /* FF9E */
4058 {0xFFA0, 0xFFA0, 0xFFA0}, {0xFFA1, 0xFFA1, 0xFFA1}, /* FFA0 */
4059 {0xFFA2, 0xFFA2, 0xFFA2}, {0xFFA3, 0xFFA3, 0xFFA3}, /* FFA2 */
4060 {0xFFA4, 0xFFA4, 0xFFA4}, {0xFFA5, 0xFFA5, 0xFFA5}, /* FFA4 */
4061 {0xFFA6, 0xFFA6, 0xFFA6}, {0xFFA7, 0xFFA7, 0xFFA7}, /* FFA6 */
4062 {0xFFA8, 0xFFA8, 0xFFA8}, {0xFFA9, 0xFFA9, 0xFFA9}, /* FFA8 */
4063 {0xFFAA, 0xFFAA, 0xFFAA}, {0xFFAB, 0xFFAB, 0xFFAB}, /* FFAA */
4064 {0xFFAC, 0xFFAC, 0xFFAC}, {0xFFAD, 0xFFAD, 0xFFAD}, /* FFAC */
4065 {0xFFAE, 0xFFAE, 0xFFAE}, {0xFFAF, 0xFFAF, 0xFFAF}, /* FFAE */
4066 {0xFFB0, 0xFFB0, 0xFFB0}, {0xFFB1, 0xFFB1, 0xFFB1}, /* FFB0 */
4067 {0xFFB2, 0xFFB2, 0xFFB2}, {0xFFB3, 0xFFB3, 0xFFB3}, /* FFB2 */
4068 {0xFFB4, 0xFFB4, 0xFFB4}, {0xFFB5, 0xFFB5, 0xFFB5}, /* FFB4 */
4069 {0xFFB6, 0xFFB6, 0xFFB6}, {0xFFB7, 0xFFB7, 0xFFB7}, /* FFB6 */
4070 {0xFFB8, 0xFFB8, 0xFFB8}, {0xFFB9, 0xFFB9, 0xFFB9}, /* FFB8 */
4071 {0xFFBA, 0xFFBA, 0xFFBA}, {0xFFBB, 0xFFBB, 0xFFBB}, /* FFBA */
4072 {0xFFBC, 0xFFBC, 0xFFBC}, {0xFFBD, 0xFFBD, 0xFFBD}, /* FFBC */
4073 {0xFFBE, 0xFFBE, 0xFFBE}, {0xFFBF, 0xFFBF, 0xFFBF}, /* FFBE */
4074 {0xFFC0, 0xFFC0, 0xFFC0}, {0xFFC1, 0xFFC1, 0xFFC1}, /* FFC0 */
4075 {0xFFC2, 0xFFC2, 0xFFC2}, {0xFFC3, 0xFFC3, 0xFFC3}, /* FFC2 */
4076 {0xFFC4, 0xFFC4, 0xFFC4}, {0xFFC5, 0xFFC5, 0xFFC5}, /* FFC4 */
4077 {0xFFC6, 0xFFC6, 0xFFC6}, {0xFFC7, 0xFFC7, 0xFFC7}, /* FFC6 */
4078 {0xFFC8, 0xFFC8, 0xFFC8}, {0xFFC9, 0xFFC9, 0xFFC9}, /* FFC8 */
4079 {0xFFCA, 0xFFCA, 0xFFCA}, {0xFFCB, 0xFFCB, 0xFFCB}, /* FFCA */
4080 {0xFFCC, 0xFFCC, 0xFFCC}, {0xFFCD, 0xFFCD, 0xFFCD}, /* FFCC */
4081 {0xFFCE, 0xFFCE, 0xFFCE}, {0xFFCF, 0xFFCF, 0xFFCF}, /* FFCE */
4082 {0xFFD0, 0xFFD0, 0xFFD0}, {0xFFD1, 0xFFD1, 0xFFD1}, /* FFD0 */
4083 {0xFFD2, 0xFFD2, 0xFFD2}, {0xFFD3, 0xFFD3, 0xFFD3}, /* FFD2 */
4084 {0xFFD4, 0xFFD4, 0xFFD4}, {0xFFD5, 0xFFD5, 0xFFD5}, /* FFD4 */
4085 {0xFFD6, 0xFFD6, 0xFFD6}, {0xFFD7, 0xFFD7, 0xFFD7}, /* FFD6 */
4086 {0xFFD8, 0xFFD8, 0xFFD8}, {0xFFD9, 0xFFD9, 0xFFD9}, /* FFD8 */
4087 {0xFFDA, 0xFFDA, 0xFFDA}, {0xFFDB, 0xFFDB, 0xFFDB}, /* FFDA */
4088 {0xFFDC, 0xFFDC, 0xFFDC}, {0xFFDD, 0xFFDD, 0xFFDD}, /* FFDC */
4089 {0xFFDE, 0xFFDE, 0xFFDE}, {0xFFDF, 0xFFDF, 0xFFDF}, /* FFDE */
4090 {0xFFE0, 0xFFE0, 0xFFE0}, {0xFFE1, 0xFFE1, 0xFFE1}, /* FFE0 */
4091 {0xFFE2, 0xFFE2, 0xFFE2}, {0xFFE3, 0xFFE3, 0xFFE3}, /* FFE2 */
4092 {0xFFE4, 0xFFE4, 0xFFE4}, {0xFFE5, 0xFFE5, 0xFFE5}, /* FFE4 */
4093 {0xFFE6, 0xFFE6, 0xFFE6}, {0xFFE7, 0xFFE7, 0xFFE7}, /* FFE6 */
4094 {0xFFE8, 0xFFE8, 0xFFE8}, {0xFFE9, 0xFFE9, 0xFFE9}, /* FFE8 */
4095 {0xFFEA, 0xFFEA, 0xFFEA}, {0xFFEB, 0xFFEB, 0xFFEB}, /* FFEA */
4096 {0xFFEC, 0xFFEC, 0xFFEC}, {0xFFED, 0xFFED, 0xFFED}, /* FFEC */
4097 {0xFFEE, 0xFFEE, 0xFFEE}, {0xFFEF, 0xFFEF, 0xFFEF}, /* FFEE */
4098 {0xFFF0, 0xFFF0, 0xFFF0}, {0xFFF1, 0xFFF1, 0xFFF1}, /* FFF0 */
4099 {0xFFF2, 0xFFF2, 0xFFF2}, {0xFFF3, 0xFFF3, 0xFFF3}, /* FFF2 */
4100 {0xFFF4, 0xFFF4, 0xFFF4}, {0xFFF5, 0xFFF5, 0xFFF5}, /* FFF4 */
4101 {0xFFF6, 0xFFF6, 0xFFF6}, {0xFFF7, 0xFFF7, 0xFFF7}, /* FFF6 */
4102 {0xFFF8, 0xFFF8, 0xFFF8}, {0xFFF9, 0xFFF9, 0xFFF9}, /* FFF8 */
4103 {0xFFFA, 0xFFFA, 0xFFFA}, {0xFFFB, 0xFFFB, 0xFFFB}, /* FFFA */
4104 {0xFFFC, 0xFFFC, 0xFFFC}, {0xFFFD, 0xFFFD, 0xFFFD}, /* FFFC */
4105 {0xFFFE, 0xFFFE, 0xFFFE}, {0xFFFF, 0xFFFF, 0xFFFF} /* FFFE */
4106 };
4107
4108 static const MY_UNICASE_CHARACTER u520p104[] = {
4109 {0x10400, 0x10428, 0x10400}, {0x10401, 0x10429, 0x10401}, /* 10400 */
4110 {0x10402, 0x1042A, 0x10402}, {0x10403, 0x1042B, 0x10403}, /* 10402 */
4111 {0x10404, 0x1042C, 0x10404}, {0x10405, 0x1042D, 0x10405}, /* 10404 */
4112 {0x10406, 0x1042E, 0x10406}, {0x10407, 0x1042F, 0x10407}, /* 10406 */
4113 {0x10408, 0x10430, 0x10408}, {0x10409, 0x10431, 0x10409}, /* 10408 */
4114 {0x1040A, 0x10432, 0x1040A}, {0x1040B, 0x10433, 0x1040B}, /* 1040A */
4115 {0x1040C, 0x10434, 0x1040C}, {0x1040D, 0x10435, 0x1040D}, /* 1040C */
4116 {0x1040E, 0x10436, 0x1040E}, {0x1040F, 0x10437, 0x1040F}, /* 1040E */
4117 {0x10410, 0x10438, 0x10410}, {0x10411, 0x10439, 0x10411}, /* 10410 */
4118 {0x10412, 0x1043A, 0x10412}, {0x10413, 0x1043B, 0x10413}, /* 10412 */
4119 {0x10414, 0x1043C, 0x10414}, {0x10415, 0x1043D, 0x10415}, /* 10414 */
4120 {0x10416, 0x1043E, 0x10416}, {0x10417, 0x1043F, 0x10417}, /* 10416 */
4121 {0x10418, 0x10440, 0x10418}, {0x10419, 0x10441, 0x10419}, /* 10418 */
4122 {0x1041A, 0x10442, 0x1041A}, {0x1041B, 0x10443, 0x1041B}, /* 1041A */
4123 {0x1041C, 0x10444, 0x1041C}, {0x1041D, 0x10445, 0x1041D}, /* 1041C */
4124 {0x1041E, 0x10446, 0x1041E}, {0x1041F, 0x10447, 0x1041F}, /* 1041E */
4125 {0x10420, 0x10448, 0x10420}, {0x10421, 0x10449, 0x10421}, /* 10420 */
4126 {0x10422, 0x1044A, 0x10422}, {0x10423, 0x1044B, 0x10423}, /* 10422 */
4127 {0x10424, 0x1044C, 0x10424}, {0x10425, 0x1044D, 0x10425}, /* 10424 */
4128 {0x10426, 0x1044E, 0x10426}, {0x10427, 0x1044F, 0x10427}, /* 10426 */
4129 {0x10400, 0x10428, 0x10400}, {0x10401, 0x10429, 0x10401}, /* 10428 */
4130 {0x10402, 0x1042A, 0x10402}, {0x10403, 0x1042B, 0x10403}, /* 1042A */
4131 {0x10404, 0x1042C, 0x10404}, {0x10405, 0x1042D, 0x10405}, /* 1042C */
4132 {0x10406, 0x1042E, 0x10406}, {0x10407, 0x1042F, 0x10407}, /* 1042E */
4133 {0x10408, 0x10430, 0x10408}, {0x10409, 0x10431, 0x10409}, /* 10430 */
4134 {0x1040A, 0x10432, 0x1040A}, {0x1040B, 0x10433, 0x1040B}, /* 10432 */
4135 {0x1040C, 0x10434, 0x1040C}, {0x1040D, 0x10435, 0x1040D}, /* 10434 */
4136 {0x1040E, 0x10436, 0x1040E}, {0x1040F, 0x10437, 0x1040F}, /* 10436 */
4137 {0x10410, 0x10438, 0x10410}, {0x10411, 0x10439, 0x10411}, /* 10438 */
4138 {0x10412, 0x1043A, 0x10412}, {0x10413, 0x1043B, 0x10413}, /* 1043A */
4139 {0x10414, 0x1043C, 0x10414}, {0x10415, 0x1043D, 0x10415}, /* 1043C */
4140 {0x10416, 0x1043E, 0x10416}, {0x10417, 0x1043F, 0x10417}, /* 1043E */
4141 {0x10418, 0x10440, 0x10418}, {0x10419, 0x10441, 0x10419}, /* 10440 */
4142 {0x1041A, 0x10442, 0x1041A}, {0x1041B, 0x10443, 0x1041B}, /* 10442 */
4143 {0x1041C, 0x10444, 0x1041C}, {0x1041D, 0x10445, 0x1041D}, /* 10444 */
4144 {0x1041E, 0x10446, 0x1041E}, {0x1041F, 0x10447, 0x1041F}, /* 10446 */
4145 {0x10420, 0x10448, 0x10420}, {0x10421, 0x10449, 0x10421}, /* 10448 */
4146 {0x10422, 0x1044A, 0x10422}, {0x10423, 0x1044B, 0x10423}, /* 1044A */
4147 {0x10424, 0x1044C, 0x10424}, {0x10425, 0x1044D, 0x10425}, /* 1044C */
4148 {0x10426, 0x1044E, 0x10426}, {0x10427, 0x1044F, 0x10427}, /* 1044E */
4149 {0x10450, 0x10450, 0x10450}, {0x10451, 0x10451, 0x10451}, /* 10450 */
4150 {0x10452, 0x10452, 0x10452}, {0x10453, 0x10453, 0x10453}, /* 10452 */
4151 {0x10454, 0x10454, 0x10454}, {0x10455, 0x10455, 0x10455}, /* 10454 */
4152 {0x10456, 0x10456, 0x10456}, {0x10457, 0x10457, 0x10457}, /* 10456 */
4153 {0x10458, 0x10458, 0x10458}, {0x10459, 0x10459, 0x10459}, /* 10458 */
4154 {0x1045A, 0x1045A, 0x1045A}, {0x1045B, 0x1045B, 0x1045B}, /* 1045A */
4155 {0x1045C, 0x1045C, 0x1045C}, {0x1045D, 0x1045D, 0x1045D}, /* 1045C */
4156 {0x1045E, 0x1045E, 0x1045E}, {0x1045F, 0x1045F, 0x1045F}, /* 1045E */
4157 {0x10460, 0x10460, 0x10460}, {0x10461, 0x10461, 0x10461}, /* 10460 */
4158 {0x10462, 0x10462, 0x10462}, {0x10463, 0x10463, 0x10463}, /* 10462 */
4159 {0x10464, 0x10464, 0x10464}, {0x10465, 0x10465, 0x10465}, /* 10464 */
4160 {0x10466, 0x10466, 0x10466}, {0x10467, 0x10467, 0x10467}, /* 10466 */
4161 {0x10468, 0x10468, 0x10468}, {0x10469, 0x10469, 0x10469}, /* 10468 */
4162 {0x1046A, 0x1046A, 0x1046A}, {0x1046B, 0x1046B, 0x1046B}, /* 1046A */
4163 {0x1046C, 0x1046C, 0x1046C}, {0x1046D, 0x1046D, 0x1046D}, /* 1046C */
4164 {0x1046E, 0x1046E, 0x1046E}, {0x1046F, 0x1046F, 0x1046F}, /* 1046E */
4165 {0x10470, 0x10470, 0x10470}, {0x10471, 0x10471, 0x10471}, /* 10470 */
4166 {0x10472, 0x10472, 0x10472}, {0x10473, 0x10473, 0x10473}, /* 10472 */
4167 {0x10474, 0x10474, 0x10474}, {0x10475, 0x10475, 0x10475}, /* 10474 */
4168 {0x10476, 0x10476, 0x10476}, {0x10477, 0x10477, 0x10477}, /* 10476 */
4169 {0x10478, 0x10478, 0x10478}, {0x10479, 0x10479, 0x10479}, /* 10478 */
4170 {0x1047A, 0x1047A, 0x1047A}, {0x1047B, 0x1047B, 0x1047B}, /* 1047A */
4171 {0x1047C, 0x1047C, 0x1047C}, {0x1047D, 0x1047D, 0x1047D}, /* 1047C */
4172 {0x1047E, 0x1047E, 0x1047E}, {0x1047F, 0x1047F, 0x1047F}, /* 1047E */
4173 {0x10480, 0x10480, 0x10480}, {0x10481, 0x10481, 0x10481}, /* 10480 */
4174 {0x10482, 0x10482, 0x10482}, {0x10483, 0x10483, 0x10483}, /* 10482 */
4175 {0x10484, 0x10484, 0x10484}, {0x10485, 0x10485, 0x10485}, /* 10484 */
4176 {0x10486, 0x10486, 0x10486}, {0x10487, 0x10487, 0x10487}, /* 10486 */
4177 {0x10488, 0x10488, 0x10488}, {0x10489, 0x10489, 0x10489}, /* 10488 */
4178 {0x1048A, 0x1048A, 0x1048A}, {0x1048B, 0x1048B, 0x1048B}, /* 1048A */
4179 {0x1048C, 0x1048C, 0x1048C}, {0x1048D, 0x1048D, 0x1048D}, /* 1048C */
4180 {0x1048E, 0x1048E, 0x1048E}, {0x1048F, 0x1048F, 0x1048F}, /* 1048E */
4181 {0x10490, 0x10490, 0x10490}, {0x10491, 0x10491, 0x10491}, /* 10490 */
4182 {0x10492, 0x10492, 0x10492}, {0x10493, 0x10493, 0x10493}, /* 10492 */
4183 {0x10494, 0x10494, 0x10494}, {0x10495, 0x10495, 0x10495}, /* 10494 */
4184 {0x10496, 0x10496, 0x10496}, {0x10497, 0x10497, 0x10497}, /* 10496 */
4185 {0x10498, 0x10498, 0x10498}, {0x10499, 0x10499, 0x10499}, /* 10498 */
4186 {0x1049A, 0x1049A, 0x1049A}, {0x1049B, 0x1049B, 0x1049B}, /* 1049A */
4187 {0x1049C, 0x1049C, 0x1049C}, {0x1049D, 0x1049D, 0x1049D}, /* 1049C */
4188 {0x1049E, 0x1049E, 0x1049E}, {0x1049F, 0x1049F, 0x1049F}, /* 1049E */
4189 {0x104A0, 0x104A0, 0x104A0}, {0x104A1, 0x104A1, 0x104A1}, /* 104A0 */
4190 {0x104A2, 0x104A2, 0x104A2}, {0x104A3, 0x104A3, 0x104A3}, /* 104A2 */
4191 {0x104A4, 0x104A4, 0x104A4}, {0x104A5, 0x104A5, 0x104A5}, /* 104A4 */
4192 {0x104A6, 0x104A6, 0x104A6}, {0x104A7, 0x104A7, 0x104A7}, /* 104A6 */
4193 {0x104A8, 0x104A8, 0x104A8}, {0x104A9, 0x104A9, 0x104A9}, /* 104A8 */
4194 {0x104AA, 0x104AA, 0x104AA}, {0x104AB, 0x104AB, 0x104AB}, /* 104AA */
4195 {0x104AC, 0x104AC, 0x104AC}, {0x104AD, 0x104AD, 0x104AD}, /* 104AC */
4196 {0x104AE, 0x104AE, 0x104AE}, {0x104AF, 0x104AF, 0x104AF}, /* 104AE */
4197 {0x104B0, 0x104B0, 0x104B0}, {0x104B1, 0x104B1, 0x104B1}, /* 104B0 */
4198 {0x104B2, 0x104B2, 0x104B2}, {0x104B3, 0x104B3, 0x104B3}, /* 104B2 */
4199 {0x104B4, 0x104B4, 0x104B4}, {0x104B5, 0x104B5, 0x104B5}, /* 104B4 */
4200 {0x104B6, 0x104B6, 0x104B6}, {0x104B7, 0x104B7, 0x104B7}, /* 104B6 */
4201 {0x104B8, 0x104B8, 0x104B8}, {0x104B9, 0x104B9, 0x104B9}, /* 104B8 */
4202 {0x104BA, 0x104BA, 0x104BA}, {0x104BB, 0x104BB, 0x104BB}, /* 104BA */
4203 {0x104BC, 0x104BC, 0x104BC}, {0x104BD, 0x104BD, 0x104BD}, /* 104BC */
4204 {0x104BE, 0x104BE, 0x104BE}, {0x104BF, 0x104BF, 0x104BF}, /* 104BE */
4205 {0x104C0, 0x104C0, 0x104C0}, {0x104C1, 0x104C1, 0x104C1}, /* 104C0 */
4206 {0x104C2, 0x104C2, 0x104C2}, {0x104C3, 0x104C3, 0x104C3}, /* 104C2 */
4207 {0x104C4, 0x104C4, 0x104C4}, {0x104C5, 0x104C5, 0x104C5}, /* 104C4 */
4208 {0x104C6, 0x104C6, 0x104C6}, {0x104C7, 0x104C7, 0x104C7}, /* 104C6 */
4209 {0x104C8, 0x104C8, 0x104C8}, {0x104C9, 0x104C9, 0x104C9}, /* 104C8 */
4210 {0x104CA, 0x104CA, 0x104CA}, {0x104CB, 0x104CB, 0x104CB}, /* 104CA */
4211 {0x104CC, 0x104CC, 0x104CC}, {0x104CD, 0x104CD, 0x104CD}, /* 104CC */
4212 {0x104CE, 0x104CE, 0x104CE}, {0x104CF, 0x104CF, 0x104CF}, /* 104CE */
4213 {0x104D0, 0x104D0, 0x104D0}, {0x104D1, 0x104D1, 0x104D1}, /* 104D0 */
4214 {0x104D2, 0x104D2, 0x104D2}, {0x104D3, 0x104D3, 0x104D3}, /* 104D2 */
4215 {0x104D4, 0x104D4, 0x104D4}, {0x104D5, 0x104D5, 0x104D5}, /* 104D4 */
4216 {0x104D6, 0x104D6, 0x104D6}, {0x104D7, 0x104D7, 0x104D7}, /* 104D6 */
4217 {0x104D8, 0x104D8, 0x104D8}, {0x104D9, 0x104D9, 0x104D9}, /* 104D8 */
4218 {0x104DA, 0x104DA, 0x104DA}, {0x104DB, 0x104DB, 0x104DB}, /* 104DA */
4219 {0x104DC, 0x104DC, 0x104DC}, {0x104DD, 0x104DD, 0x104DD}, /* 104DC */
4220 {0x104DE, 0x104DE, 0x104DE}, {0x104DF, 0x104DF, 0x104DF}, /* 104DE */
4221 {0x104E0, 0x104E0, 0x104E0}, {0x104E1, 0x104E1, 0x104E1}, /* 104E0 */
4222 {0x104E2, 0x104E2, 0x104E2}, {0x104E3, 0x104E3, 0x104E3}, /* 104E2 */
4223 {0x104E4, 0x104E4, 0x104E4}, {0x104E5, 0x104E5, 0x104E5}, /* 104E4 */
4224 {0x104E6, 0x104E6, 0x104E6}, {0x104E7, 0x104E7, 0x104E7}, /* 104E6 */
4225 {0x104E8, 0x104E8, 0x104E8}, {0x104E9, 0x104E9, 0x104E9}, /* 104E8 */
4226 {0x104EA, 0x104EA, 0x104EA}, {0x104EB, 0x104EB, 0x104EB}, /* 104EA */
4227 {0x104EC, 0x104EC, 0x104EC}, {0x104ED, 0x104ED, 0x104ED}, /* 104EC */
4228 {0x104EE, 0x104EE, 0x104EE}, {0x104EF, 0x104EF, 0x104EF}, /* 104EE */
4229 {0x104F0, 0x104F0, 0x104F0}, {0x104F1, 0x104F1, 0x104F1}, /* 104F0 */
4230 {0x104F2, 0x104F2, 0x104F2}, {0x104F3, 0x104F3, 0x104F3}, /* 104F2 */
4231 {0x104F4, 0x104F4, 0x104F4}, {0x104F5, 0x104F5, 0x104F5}, /* 104F4 */
4232 {0x104F6, 0x104F6, 0x104F6}, {0x104F7, 0x104F7, 0x104F7}, /* 104F6 */
4233 {0x104F8, 0x104F8, 0x104F8}, {0x104F9, 0x104F9, 0x104F9}, /* 104F8 */
4234 {0x104FA, 0x104FA, 0x104FA}, {0x104FB, 0x104FB, 0x104FB}, /* 104FA */
4235 {0x104FC, 0x104FC, 0x104FC}, {0x104FD, 0x104FD, 0x104FD}, /* 104FC */
4236 {0x104FE, 0x104FE, 0x104FE}, {0x104FF, 0x104FF, 0x104FF} /* 104FE */
4237 };
4238
4239 const MY_UNICASE_CHARACTER *my_unicase_pages_unicode520[4352] = {
4240 u520p00, u520p01, u520p02, u520p03, u520p04, u520p05, nullptr, nullptr,
4241 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4242 u520p10, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4243 nullptr, nullptr, nullptr, nullptr, nullptr, u520p1D, u520p1E, u520p1F,
4244 nullptr, u520p21, nullptr, nullptr, u520p24, nullptr, nullptr, nullptr,
4245 nullptr, nullptr, nullptr, nullptr, u520p2C, u520p2D, nullptr, nullptr,
4246 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4247 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4248 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4249 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4250 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4251 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4252 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4253 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4254 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4255 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4256 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4257 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4258 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4259 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4260 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, u520pA6, u520pA7,
4261 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4262 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4263 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4264 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4265 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4266 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4267 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4268 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4269 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4270 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4271 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, u520pFF,
4272 nullptr, nullptr, nullptr, nullptr, u520p104, nullptr, nullptr, nullptr,
4273 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4274 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4275 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4276 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4277 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4278 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4279 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4280 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4281 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4282 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4283 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4284 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4285 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4286 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4287 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4288 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4289 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4290 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4291 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4292 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4293 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4294 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4295 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4296 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4297 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4298 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4299 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4300 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4301 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4302 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4303 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4304 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4305 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4306 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4307 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4308 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4309 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4310 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4311 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4312 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4313 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4314 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4315 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4316 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4317 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4318 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4319 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4320 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4321 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4322 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4323 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4324 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4325 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4326 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4327 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4328 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4329 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4330 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4331 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4332 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4333 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4334 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4335 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4336 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4337 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4338 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4339 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4340 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4341 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4342 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4343 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4344 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4345 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4346 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4347 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4348 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4349 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4350 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4351 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4352 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4353 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4354 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4355 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4356 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4357 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4358 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4359 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4360 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4361 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4362 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4363 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4364 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4365 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4366 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4367 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4368 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4369 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4370 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4371 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4372 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4373 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4374 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4375 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4376 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4377 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4378 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4379 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4380 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4381 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4382 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4383 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4384 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4385 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4386 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4387 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4388 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4389 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4390 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4391 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4392 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4393 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4394 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4395 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4396 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4397 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4398 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4399 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4400 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4401 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4402 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4403 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4404 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4405 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4406 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4407 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4408 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4409 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4410 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4411 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4412 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4413 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4414 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4415 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4416 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4417 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4418 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4419 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4420 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4421 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4422 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4423 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4424 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4425 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4426 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4427 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4428 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4429 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4430 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4431 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4432 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4433 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4434 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4435 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4436 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4437 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4438 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4439 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4440 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4441 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4442 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4443 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4444 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4445 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4446 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4447 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4448 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4449 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4450 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4451 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4452 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4453 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4454 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4455 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4456 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4457 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4458 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4459 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4460 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4461 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4462 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4463 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4464 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4465 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4466 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4467 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4468 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4469 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4470 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4471 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4472 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4473 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4474 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4475 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4476 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4477 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4478 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4479 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4480 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4481 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4482 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4483 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4484 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4485 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4486 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4487 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4488 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4489 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4490 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4491 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4492 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4493 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4494 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4495 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4496 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4497 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4498 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4499 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4500 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4501 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4502 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4503 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4504 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4505 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4506 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4507 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4508 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4509 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4510 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4511 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4512 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4513 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4514 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4515 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4516 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4517 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4518 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4519 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4520 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4521 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4522 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4523 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4524 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4525 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4526 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4527 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4528 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4529 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4530 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4531 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4532 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4533 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4534 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4535 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4536 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4537 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4538 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4539 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4540 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4541 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4542 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4543 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4544 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4545 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4546 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4547 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4548 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4549 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4550 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4551 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4552 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4553 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4554 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4555 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4556 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4557 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4558 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4559 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4560 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4561 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4562 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4563 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4564 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4565 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4566 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4567 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4568 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4569 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4570 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4571 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4572 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4573 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4574 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4575 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4576 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4577 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4578 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4579 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4580 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4581 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4582 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4583 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4584 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4585 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4586 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4587 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4588 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4589 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4590 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4591 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4592 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4593 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4594 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4595 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4596 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4597 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4598 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4599 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4600 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4601 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4602 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4603 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4604 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4605 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4606 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4607 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4608 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4609 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4610 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4611 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4612 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4613 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4614 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4615 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4616 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4617 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4618 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4619 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4620 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4621 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4622 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4623 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4624 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4625 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4626 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4627 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4628 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4629 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4630 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4631 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4632 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4633 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4634 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4635 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4636 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4637 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4638 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4639 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4640 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4641 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4642 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4643 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4644 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4645 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4646 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4647 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4648 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4649 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4650 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4651 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4652 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4653 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4654 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4655 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4656 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4657 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4658 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4659 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4660 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4661 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4662 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4663 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4664 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4665 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4666 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4667 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4668 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4669 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4670 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4671 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4672 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4673 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4674 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4675 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4676 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4677 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4678 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4679 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4680 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4681 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4682 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4683 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4684 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4685 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4686 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4687 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4688 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4689 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4690 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4691 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4692 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4693 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4694 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4695 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4696 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4697 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4698 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4699 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4700 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4701 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4702 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4703 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4704 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4705 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4706 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4707 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4708 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4709 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4710 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4711 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4712 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4713 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4714 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4715 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4716 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4717 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4718 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4719 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4720 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4721 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4722 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4723 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4724 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4725 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4726 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4727 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4728 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4729 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4730 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4731 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4732 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4733 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4734 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4735 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4736 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4737 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4738 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4739 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4740 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4741 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4742 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4743 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4744 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4745 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4746 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4747 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4748 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4749 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4750 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4751 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4752 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4753 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4754 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4755 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4756 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4757 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4758 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4759 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4760 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4761 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4762 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4763 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4764 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4765 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4766 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4767 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4768 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4769 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4770 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4771 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4772 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4773 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4774 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4775 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4776 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4777 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4778 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4779 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4780 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4781 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4782 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4783 nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr, nullptr,
4784 };
4785
4786 MY_UNICASE_INFO my_unicase_unicode520 = {0x10FFFF, my_unicase_pages_unicode520};
4787
4788 14199328851 static inline void my_tosort_unicode(const MY_UNICASE_INFO *uni_plane,
4789 my_wc_t *wc, uint flags) {
4790
2/2
✓ Branch 0 taken 14186780251 times.
✓ Branch 1 taken 12548600 times.
14199328851 if (*wc <= uni_plane->maxchar) {
4791 const MY_UNICASE_CHARACTER *page;
4792
2/2
✓ Branch 0 taken 14184541671 times.
✓ Branch 1 taken 2238580 times.
14186780251 if ((page = uni_plane->page[*wc >> 8]))
4793
2/2
✓ Branch 0 taken 4296065320 times.
✓ Branch 1 taken 9888476351 times.
24073018022 *wc = (flags & MY_CS_LOWER_SORT) ? page[*wc & 0xFF].tolower
4794 9888476351 : page[*wc & 0xFF].sort;
4795 } else {
4796 12548929 *wc = MY_CS_REPLACEMENT_CHARACTER;
4797 }
4798 14199328851 }
4799
4800 /*
4801 ** Compare string against string with wildcard
4802 ** This function is used in UTF8 and UCS2
4803 **
4804 ** 0 if matched
4805 ** -1 if not matched with wildcard
4806 ** 1 if matched with wildcard
4807 */
4808
4809 1324002 static int my_wildcmp_unicode_impl(const CHARSET_INFO *cs, const char *str,
4810 const char *str_end, const char *wildstr,
4811 const char *wildend, int escape, int w_one,
4812 int w_many, const MY_UNICASE_INFO *weights,
4813 int recurse_level) {
4814 1324002 int result = -1; /* Not found, using wildcards */
4815 my_wc_t s_wc, w_wc;
4816 int scan;
4817 int (*mb_wc)(const CHARSET_INFO *, my_wc_t *, const uchar *, const uchar *);
4818 1324002 mb_wc = cs->cset->mb_wc;
4819
4820
4/8
✓ Branch 0 taken 1324002 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1324002 times.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 1324002 times.
✗ Branch 6 not taken.
✓ Branch 7 taken 1324002 times.
1324002 if (my_string_stack_guard && my_string_stack_guard(recurse_level)) return 1;
4821
2/2
✓ Branch 0 taken 1323667 times.
✓ Branch 1 taken 335 times.
1324002 while (wildstr != wildend) {
4822 while (true) {
4823 1792290 bool escaped = false;
4824
1/2
✓ Branch 0 taken 1792290 times.
✗ Branch 1 not taken.
1792290 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4825
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1792290 times.
1792290 (const uchar *)wildend)) <= 0)
4826 return 1;
4827
4828
2/2
✓ Branch 0 taken 136896 times.
✓ Branch 1 taken 1655394 times.
1792290 if (w_wc == (my_wc_t)w_many) {
4829 136896 result = 1; /* Found an anchor char */
4830 136896 break;
4831 }
4832
4833 1655394 wildstr += scan;
4834
4/4
✓ Branch 0 taken 249 times.
✓ Branch 1 taken 1655145 times.
✓ Branch 2 taken 248 times.
✓ Branch 3 taken 1 times.
1655394 if (w_wc == (my_wc_t)escape && wildstr < wildend) {
4835
1/2
✓ Branch 0 taken 248 times.
✗ Branch 1 not taken.
248 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4836
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 248 times.
248 (const uchar *)wildend)) <= 0)
4837 return 1;
4838 248 wildstr += scan;
4839 248 escaped = true;
4840 }
4841
4842
1/2
✓ Branch 0 taken 1655394 times.
✗ Branch 1 not taken.
1655394 if ((scan = mb_wc(cs, &s_wc, (const uchar *)str,
4843
2/2
✓ Branch 0 taken 7350 times.
✓ Branch 1 taken 1648044 times.
1655394 (const uchar *)str_end)) <= 0)
4844 7350 return 1;
4845 1648044 str += scan;
4846
4847
4/4
✓ Branch 0 taken 1647796 times.
✓ Branch 1 taken 248 times.
✓ Branch 2 taken 31139 times.
✓ Branch 3 taken 1616657 times.
1648044 if (!escaped && w_wc == (my_wc_t)w_one) {
4848 31139 result = 1; /* Found an anchor char */
4849 } else {
4850
2/2
✓ Branch 0 taken 1616524 times.
✓ Branch 1 taken 381 times.
1616905 if (weights) {
4851 1616524 my_tosort_unicode(weights, &s_wc, cs->state);
4852 1616524 my_tosort_unicode(weights, &w_wc, cs->state);
4853 }
4854
2/2
✓ Branch 0 taken 1161829 times.
✓ Branch 1 taken 455076 times.
1616905 if (s_wc != w_wc) return 1; /* No match */
4855 }
4856
2/2
✓ Branch 0 taken 17592 times.
✓ Branch 1 taken 468623 times.
486215 if (wildstr == wildend)
4857 17592 return (str != str_end); /* Match if both are at end */
4858 468623 }
4859
4860
1/2
✓ Branch 0 taken 136896 times.
✗ Branch 1 not taken.
136896 if (w_wc == (my_wc_t)w_many) { /* Found w_many */
4861
4862 /* Remove any '%' and '_' from the wild search string */
4863
2/2
✓ Branch 0 taken 247817 times.
✓ Branch 1 taken 26047 times.
273864 for (; wildstr != wildend;) {
4864
1/2
✓ Branch 0 taken 247817 times.
✗ Branch 1 not taken.
247817 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4865
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 247817 times.
247817 (const uchar *)wildend)) <= 0)
4866 return 1;
4867
4868
2/2
✓ Branch 0 taken 136960 times.
✓ Branch 1 taken 110857 times.
247817 if (w_wc == (my_wc_t)w_many) {
4869 136960 wildstr += scan;
4870 136960 continue;
4871 }
4872
4873
2/2
✓ Branch 0 taken 8 times.
✓ Branch 1 taken 110849 times.
110857 if (w_wc == (my_wc_t)w_one) {
4874 8 wildstr += scan;
4875
1/2
✓ Branch 0 taken 8 times.
✗ Branch 1 not taken.
8 if ((scan = mb_wc(cs, &s_wc, (const uchar *)str,
4876
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 8 times.
8 (const uchar *)str_end)) <= 0)
4877 return 1;
4878 8 str += scan;
4879 8 continue;
4880 }
4881 110849 break; /* Not a wild character */
4882 }
4883
4884
2/2
✓ Branch 0 taken 26047 times.
✓ Branch 1 taken 110849 times.
136896 if (wildstr == wildend) return 0; /* Ok if w_many is last */
4885
4886
2/2
✓ Branch 0 taken 199 times.
✓ Branch 1 taken 110650 times.
110849 if (str == str_end) return -1;
4887
4888
1/2
✓ Branch 0 taken 110650 times.
✗ Branch 1 not taken.
110650 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4889
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 110650 times.
110650 (const uchar *)wildend)) <= 0)
4890 return 1;
4891 110650 wildstr += scan;
4892
4893
2/2
✓ Branch 0 taken 1 times.
✓ Branch 1 taken 110649 times.
110650 if (w_wc == (my_wc_t)escape) {
4894
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1 times.
1 if (wildstr < wildend) {
4895 if ((scan = mb_wc(cs, &w_wc, (const uchar *)wildstr,
4896 (const uchar *)wildend)) <= 0)
4897 return 1;
4898 wildstr += scan;
4899 }
4900 }
4901
4902 while (true) {
4903 /* Skip until the first character from wildstr is found */
4904
2/2
✓ Branch 0 taken 2198848 times.
✓ Branch 1 taken 99774 times.
2298622 while (str != str_end) {
4905
1/2
✓ Branch 0 taken 2198848 times.
✗ Branch 1 not taken.
2198848 if ((scan = mb_wc(cs, &s_wc, (const uchar *)str,
4906
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2198848 times.
2198848 (const uchar *)str_end)) <= 0)
4907 return 1;
4908
1/2
✓ Branch 0 taken 2198848 times.
✗ Branch 1 not taken.
2198848 if (weights) {
4909 2198848 my_tosort_unicode(weights, &s_wc, cs->state);
4910 2198848 my_tosort_unicode(weights, &w_wc, cs->state);
4911 }
4912
4913
2/2
✓ Branch 0 taken 130792 times.
✓ Branch 1 taken 2068056 times.
2198848 if (s_wc == w_wc) break;
4914 2068056 str += scan;
4915 }
4916
2/2
✓ Branch 0 taken 99774 times.
✓ Branch 1 taken 130792 times.
230566 if (str == str_end) return -1;
4917
4918 130792 str += scan;
4919 result =
4920
1/2
✓ Branch 0 taken 130792 times.
✗ Branch 1 not taken.
130792 my_wildcmp_unicode_impl(cs, str, str_end, wildstr, wildend, escape,
4921 w_one, w_many, weights, recurse_level + 1);
4922
2/2
✓ Branch 0 taken 10876 times.
✓ Branch 1 taken 119916 times.
130792 if (result <= 0) return result;
4923 }
4924 }
4925 }
4926
2/2
✓ Branch 0 taken 190 times.
✓ Branch 1 taken 145 times.
335 return (str != str_end ? 1 : 0);
4927 }
4928
4929 1193210 int my_wildcmp_unicode(const CHARSET_INFO *cs, const char *str,
4930 const char *str_end, const char *wildstr,
4931 const char *wildend, int escape, int w_one, int w_many,
4932 const MY_UNICASE_INFO *weights) {
4933 1193210 return my_wildcmp_unicode_impl(cs, str, str_end, wildstr, wildend, escape,
4934 1193210 w_one, w_many, weights, 1);
4935 }
4936
4937 namespace {
4938
4939 template <class Pointee, class Offset>
4940 72092472 Pointee *add_with_saturate(Pointee *ptr, Offset offset) {
4941 static_assert(!is_signed<Pointee>::value, "pointers must be unsigned");
4942 static_assert(!is_signed<Offset>::value, "offset must be unsigned");
4943
4944 72092472 Pointee *new_ptr = ptr + offset;
4945
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 72092472 times.
72092472 if (new_ptr < ptr) {
4946 // Value wrapped around; saturate to the maximum value.
4947 // Note that numeric_limits<Pointee *> is not necessarily specialized.
4948 return reinterpret_cast<Pointee *>(intptr_t(-1));
4949 }
4950 72092472 return new_ptr;
4951 }
4952
4953 } // namespace
4954
4955 /**
4956 Pad buffer with weights for space characters.
4957
4958 @details
4959 This functions fills the buffer pointed by "str"
4960 with weights of space character. Not more than
4961 "nweights" weights are put. If at some iteration
4962 step only a half of weight can fit
4963 (which is possible if buffer length is an odd number)
4964 then a half of this weight is put - this gives
4965 a little bit better ORDER BY result for long strings.
4966
4967 @param str Buffer
4968 @param strend End of buffer
4969 @param nweights Number of weights
4970
4971 @return Result length
4972 */
4973
4974 36046236 static size_t my_strxfrm_pad_nweights_unicode(uchar *str, uchar *strend,
4975 size_t nweights) {
4976
2/4
✓ Branch 0 taken 36046236 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 36046236 times.
✗ Branch 3 not taken.
36046236 assert(str && str <= strend);
4977 72092472 strend = std::min(
4978 36046236 strend, add_with_saturate(add_with_saturate(str, nweights), nweights));
4979
4980 36046236 uchar *str0 = str;
4981 // Write 16 bytes of padding at a time. (Constant-sized memcpy
4982 // usually gets optimized to large, unaligned writes.)
4983 static constexpr char pattern[16] = {0, 0x20, 0, 0x20, 0, 0x20, 0, 0x20,
4984 0, 0x20, 0, 0x20, 0, 0x20, 0, 0x20};
4985 36046236 const size_t blocks_fast_path = (strend - str) / sizeof(pattern);
4986
2/2
✓ Branch 0 taken 427215333 times.
✓ Branch 1 taken 36046236 times.
463261569 for (size_t i = 0; i < blocks_fast_path; ++i) {
4987 427215333 memcpy(str, pattern, sizeof(pattern));
4988 427215333 str += sizeof(pattern);
4989 }
4990 36046236 memcpy(str, pattern, strend - str);
4991 36046236 return strend - str0;
4992 }
4993
4994 /**
4995 Pad buffer with weights for space characters.
4996
4997 @details
4998 This functions fills the buffer pointed by "str"
4999 with weights of space character. Putting half of weight
5000 (when buffer length is an odd number) is OK.
5001
5002 @param str Buffer
5003 @param strend End of buffer
5004
5005 @return Result length
5006 */
5007
5008 3290 static size_t my_strxfrm_pad_unicode(uchar *str, uchar *strend) {
5009 3290 uchar *str0 = str;
5010
2/4
✓ Branch 0 taken 3290 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 3290 times.
✗ Branch 3 not taken.
3290 assert(str && str <= strend);
5011
2/2
✓ Branch 0 taken 14028 times.
✓ Branch 1 taken 3290 times.
17318 for (; str < strend;) {
5012 14028 *str++ = 0x00;
5013
2/2
✓ Branch 0 taken 13861 times.
✓ Branch 1 taken 167 times.
14028 if (str < strend) *str++ = 0x20;
5014 }
5015 3290 return str - str0;
5016 }
5017
5018 /*
5019 Actual implementation of my_strnxfrm_unicode, specialized by the mb_wc
5020 function (ie., the function that converts multibyte characters to
5021 one wide character). This is inlined because the call overhead of
5022 mb_wc() would otherwise be quite large.
5023 */
5024 template <class Mb_wc>
5025 106210738 static inline size_t my_strnxfrm_unicode_tmpl(const CHARSET_INFO *cs,
5026 Mb_wc mb_wc, uchar *dst,
5027 size_t dstlen, uint nweights,
5028 const uchar *src, size_t srclen,
5029 uint flags) {
5030 106210738 uchar *dst0 = dst;
5031 106210738 uchar *de = dst + dstlen;
5032 106210738 const uchar *se = src + srclen;
5033
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 53105369 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
106210738 assert(src || srclen == 0);
5034
5035 // We manually hoist this if test out of the loop; seemingly GCC
5036 // (at least 6.1.1) isn't smart enough to do it on its own.
5037
2/2
✓ Branch 0 taken 17416151 times.
✓ Branch 1 taken 35689218 times.
106210738 if (cs->state & MY_CS_BINSORT) {
5038 // Do as many whole characters as we can.
5039 34832302 const size_t nweights_fast_path =
5040 34832302 std::min<size_t>((de - dst) / 2, nweights);
5041
2/2
✓ Branch 0 taken 292429007 times.
✓ Branch 1 taken 391615 times.
585641244 for (size_t i = 0; i < nweights_fast_path; ++i, --nweights) {
5042 my_wc_t wc;
5043
1/2
✓ Branch 0 taken 214714 times.
✗ Branch 1 not taken.
584858014 int res = mb_wc(&wc, src, se);
5044
2/2
✓ Branch 0 taken 17024536 times.
✓ Branch 1 taken 275404471 times.
584858014 if (res <= 0) // End of string, or invalid character.
5045 34049072 goto pad;
5046 550808942 src += res;
5047 1101617884 dst = store16be(dst, wc);
5048 }
5049
5050 // Leftover single byte, if any.
5051
3/4
✓ Branch 0 taken 387961 times.
✓ Branch 1 taken 3654 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 387961 times.
783230 if (dst < de && nweights) {
5052 my_wc_t wc;
5053 int res = mb_wc(&wc, src, se);
5054 if (res > 0) {
5055 src += res;
5056 *dst++ = (uchar)(wc >> 8);
5057 }
5058 }
5059 } else {
5060 71378436 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5061
5062 // Do as many whole characters as we can.
5063 71378436 const size_t nweights_fast_path =
5064 71378436 std::min<size_t>((de - dst) / 2, nweights);
5065
2/2
✓ Branch 0 taken 406139199 times.
✓ Branch 1 taken 16667527 times.
845613452 for (size_t i = 0; i < nweights_fast_path; ++i, --nweights) {
5066 my_wc_t wc;
5067
1/2
✓ Branch 0 taken 13786403 times.
✗ Branch 1 not taken.
812278402 int res = mb_wc(&wc, src, se);
5068
2/2
✓ Branch 0 taken 19021694 times.
✓ Branch 1 taken 387117507 times.
812278402 if (res <= 0) // End of string, or invalid character.
5069 38043388 goto pad;
5070 774235014 src += res;
5071
5072 774235014 my_tosort_unicode(uni_plane, &wc, cs->state);
5073
5074 1548470030 dst = store16be(dst, wc);
5075 }
5076
5077 // Leftover single byte, if any.
5078
4/4
✓ Branch 0 taken 2344934 times.
✓ Branch 1 taken 14322593 times.
✓ Branch 2 taken 14322581 times.
✓ Branch 3 taken 12 times.
33335054 if (dst < de && nweights) {
5079 my_wc_t wc;
5080
1/2
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
24 int res = mb_wc(&wc, src, se);
5081
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 6 times.
24 if (res > 0) {
5082 12 my_tosort_unicode(uni_plane, &wc, cs->state);
5083 12 src += res;
5084 12 *dst++ = (uchar)(wc >> 8);
5085 }
5086 }
5087 }
5088
5089 33335030 pad:
5090
4/4
✓ Branch 0 taken 50756778 times.
✓ Branch 1 taken 2348594 times.
✓ Branch 2 taken 36046236 times.
✓ Branch 3 taken 14710542 times.
106210744 if (dst < de && nweights) // PAD SPACE behavior.
5091 72092472 dst += my_strxfrm_pad_nweights_unicode(dst, de, nweights);
5092
5093
4/4
✓ Branch 0 taken 36785952 times.
✓ Branch 1 taken 16319420 times.
✓ Branch 2 taken 3290 times.
✓ Branch 3 taken 36782662 times.
106210744 if ((flags & MY_STRXFRM_PAD_TO_MAXLEN) && dst < de)
5094 6580 dst += my_strxfrm_pad_unicode(dst, de);
5095 106210744 return dst - dst0;
5096 }
5097
5098 /*
5099 Store sorting weights using 2 bytes per character.
5100
5101 This function is shared between
5102 - utf8mb3_general_ci, utf8mb3_bin, ucs2_general_ci, ucs2_bin
5103 which support BMP only (U+0000..U+FFFF).
5104 - utf8mb4_general_ci, utf16_general_ci, utf32_general_ci,
5105 which map all supplementary characters to weight 0xFFFD.
5106 */
5107 53105369 size_t my_strnxfrm_unicode(const CHARSET_INFO *cs, uchar *dst, size_t dstlen,
5108 uint nweights, const uchar *src, size_t srclen,
5109 uint flags) {
5110 // my_mb_wc_utf8mb3 is so common that we special-case it; short-circuit away
5111 // the thunk, and get it inlined.
5112
2/2
✓ Branch 0 taken 39140852 times.
✓ Branch 1 taken 13964517 times.
53105369 if (cs->cset->mb_wc == my_mb_wc_utf8mb3_thunk) {
5113 39140852 return my_strnxfrm_unicode_tmpl(cs, Mb_wc_utf8mb3(), dst, dstlen, nweights,
5114 39140854 src, srclen, flags);
5115 } else {
5116 // Fallback using a function pointer (which the compiler is unlikely
5117 // to be able to optimize away).
5118 13964517 Mb_wc_through_function_pointer mb_wc(cs);
5119
1/2
✓ Branch 0 taken 13964518 times.
✗ Branch 1 not taken.
13964518 return my_strnxfrm_unicode_tmpl(cs, mb_wc, dst, dstlen, nweights, src,
5120 13964518 srclen, flags);
5121 }
5122 }
5123
5124 /*
5125 Store sorting weights using 3 bytes per character.
5126 This function is shared between utf8mb4_bin, utf16_bin, utf32_bin.
5127 */
5128 13419346 size_t my_strnxfrm_unicode_full_bin(const CHARSET_INFO *cs, uchar *dst,
5129 size_t dstlen, uint nweights,
5130 const uchar *src, size_t srclen,
5131 uint flags) {
5132 13419346 my_wc_t wc = 0;
5133 13419346 uchar *dst0 = dst;
5134 13419346 uchar *de = dst + dstlen;
5135 13419346 const uchar *se = src + srclen;
5136
5137
1/4
✗ Branch 0 not taken.
✓ Branch 1 taken 13419346 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
13419346 assert(src || srclen == 0);
5138
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 13419346 times.
13419346 assert(cs->state & MY_CS_BINSORT);
5139
5140
4/4
✓ Branch 0 taken 26991567 times.
✓ Branch 1 taken 810 times.
✓ Branch 2 taken 13640241 times.
✓ Branch 3 taken 13351326 times.
26992377 for (; dst < de && nweights; nweights--) {
5141 int res;
5142
3/4
✓ Branch 0 taken 13640241 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 67210 times.
✓ Branch 3 taken 13573031 times.
13640241 if ((res = cs->cset->mb_wc(cs, &wc, src, se)) <= 0) break;
5143 13573031 src += res;
5144 13573031 *dst++ = (uchar)(wc >> 16);
5145
2/2
✓ Branch 0 taken 13572995 times.
✓ Branch 1 taken 36 times.
13573031 if (dst < de) {
5146 13572995 *dst++ = (uchar)((wc >> 8) & 0xFF);
5147
2/2
✓ Branch 0 taken 13572575 times.
✓ Branch 1 taken 420 times.
13572995 if (dst < de) *dst++ = (uchar)(wc & 0xFF);
5148 }
5149 }
5150
5151
2/2
✓ Branch 0 taken 60979 times.
✓ Branch 1 taken 13358367 times.
13419346 if (flags & MY_STRXFRM_PAD_TO_MAXLEN) {
5152 // Pad with an infinite amount of spaces.
5153
2/2
✓ Branch 0 taken 1909186 times.
✓ Branch 1 taken 60979 times.
1970165 while (dst < de) {
5154 1909186 *dst++ = 0x00;
5155
2/2
✓ Branch 0 taken 1909123 times.
✓ Branch 1 taken 63 times.
1909186 if (dst < de) {
5156 1909123 *dst++ = 0x00;
5157
2/2
✓ Branch 0 taken 1909105 times.
✓ Branch 1 taken 18 times.
1909123 if (dst < de) *dst++ = 0x20;
5158 }
5159 }
5160 } else {
5161 // Regular PAD SPACE behavior.
5162
4/4
✓ Branch 0 taken 13375542 times.
✓ Branch 1 taken 922 times.
✓ Branch 2 taken 18097 times.
✓ Branch 3 taken 13357445 times.
13376464 for (; dst < de && nweights; nweights--) {
5163 18097 *dst++ = 0x00;
5164
1/2
✓ Branch 0 taken 18097 times.
✗ Branch 1 not taken.
18097 if (dst < de) {
5165 18097 *dst++ = 0x00;
5166
1/2
✓ Branch 0 taken 18097 times.
✗ Branch 1 not taken.
18097 if (dst < de) *dst++ = 0x20;
5167 }
5168 }
5169 }
5170 13419346 return dst - dst0;
5171 }
5172
5173 36991 size_t my_strnxfrmlen_unicode_full_bin(const CHARSET_INFO *cs, size_t len) {
5174 36991 return ((len + 3) / cs->mbmaxlen) * 3;
5175 }
5176
5177 /*
5178 We consider bytes with code more than 127 as a letter.
5179 This guarantees that word boundaries work fine with regular
5180 expressions. Note, there is no need to mark byte 255 as a
5181 letter, it is illegal byte in UTF8.
5182 */
5183 static const uchar ctype_utf8mb3[] = {
5184 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32,
5185 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
5186 32, 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
5187 16, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 16, 16, 16, 16, 16,
5188 16, 16, 129, 129, 129, 129, 129, 129, 1, 1, 1, 1, 1, 1, 1, 1,
5189 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16,
5190 16, 16, 130, 130, 130, 130, 130, 130, 2, 2, 2, 2, 2, 2, 2, 2,
5191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16,
5192 32, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5193 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5194 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5195 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5196 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5197 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5198 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5199 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
5200 0};
5201
5202 /* The below are taken from usa7 implementation */
5203
5204 static const uchar to_lower_utf8mb3[] = {
5205 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
5206 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
5207 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
5208 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
5209 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
5210 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
5211 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
5212 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
5213 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
5214 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
5215 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
5216 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
5217 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
5218 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
5219 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
5220 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
5221 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
5222 255};
5223
5224 static const uchar to_upper_utf8mb3[] = {
5225 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
5226 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
5227 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
5228 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
5229 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
5230 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
5231 90, 91, 92, 93, 94, 95, 96, 65, 66, 67, 68, 69, 70, 71, 72,
5232 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
5233 88, 89, 90, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
5234 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
5235 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
5236 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
5237 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
5238 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
5239 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
5240 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
5241 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
5242 255};
5243
5244 983 static inline int bincmp(const uchar *s, const uchar *se, const uchar *t,
5245 const uchar *te) {
5246 983 int slen = (int)(se - s), tlen = (int)(te - t);
5247 983 int len = std::min(slen, tlen);
5248 983 int cmp = memcmp(s, t, len);
5249
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 983 times.
983 return cmp ? cmp : slen - tlen;
5250 }
5251
5252 /*
5253 The same as above, but without range check
5254 for example, for a null-terminated string
5255 */
5256 375119182 static int my_mb_wc_utf8mb3_no_range(my_wc_t *pwc, const uchar *s) {
5257 375119182 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/false, /*SUPPORT_MB4=*/false>(
5258 375119182 pwc, s, nullptr);
5259 }
5260
5261 extern "C" {
5262 2564183529 static int my_uni_utf8mb3(const CHARSET_INFO *cs [[maybe_unused]], my_wc_t wc,
5263 uchar *r, uchar *e) {
5264 int count;
5265
5266
2/2
✓ Branch 0 taken 263 times.
✓ Branch 1 taken 2564183266 times.
2564183529 if (r >= e) return MY_CS_TOOSMALL;
5267
5268
2/2
✓ Branch 0 taken 2469423552 times.
✓ Branch 1 taken 94759714 times.
2564183266 if (wc < 0x80)
5269 2469423552 count = 1;
5270
2/2
✓ Branch 0 taken 373423 times.
✓ Branch 1 taken 94386291 times.
94759714 else if (wc < 0x800)
5271 373423 count = 2;
5272
2/2
✓ Branch 0 taken 6305130 times.
✓ Branch 1 taken 88081161 times.
94386291 else if (wc < 0x10000)
5273 6305130 count = 3;
5274 else
5275 88081163 return MY_CS_ILUNI;
5276
5277 /*
5278 e is a character after the string r, not the last character of it.
5279 Because of it (r+count > e), not (r+count-1 >e )
5280 */
5281
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 2476102099 times.
2476102105 if (r + count > e) return MY_CS_TOOSMALLN(count);
5282
5283
4/4
✓ Branch 0 taken 6305129 times.
✓ Branch 1 taken 373419 times.
✓ Branch 2 taken 2469423508 times.
✓ Branch 3 taken 43 times.
2476102099 switch (count) {
5284 6305129 case 3:
5285 6305129 r[2] = (uchar)(0x80 | (wc & 0x3f));
5286 6305129 wc = wc >> 6;
5287 6305129 wc |= 0x800;
5288 [[fallthrough]];
5289 6678548 case 2:
5290 6678548 r[1] = (uchar)(0x80 | (wc & 0x3f));
5291 6678548 wc = wc >> 6;
5292 6678548 wc |= 0xc0;
5293 [[fallthrough]];
5294 2476102056 case 1:
5295 2476102056 r[0] = (uchar)wc;
5296 }
5297 2476102099 return count;
5298 }
5299 } // extern "C"
5300
5301 /*
5302 The same as above, but without range check.
5303 */
5304 375119171 static int my_uni_utf8mb3_no_range(const CHARSET_INFO *cs [[maybe_unused]],
5305 my_wc_t wc, uchar *r) {
5306 int count;
5307
5308
2/2
✓ Branch 0 taken 375087842 times.
✓ Branch 1 taken 31329 times.
375119171 if (wc < 0x80)
5309 375087842 count = 1;
5310
2/2
✓ Branch 0 taken 2354 times.
✓ Branch 1 taken 28975 times.
31331 else if (wc < 0x800)
5311 2354 count = 2;
5312
1/2
✓ Branch 0 taken 29018 times.
✗ Branch 1 not taken.
28977 else if (wc < 0x10000)
5313 29018 count = 3;
5314 else
5315 return MY_CS_ILUNI;
5316
5317
3/4
✓ Branch 0 taken 29018 times.
✓ Branch 1 taken 2354 times.
✓ Branch 2 taken 375087845 times.
✗ Branch 3 not taken.
375119214 switch (count) {
5318 29018 case 3:
5319 29018 r[2] = (uchar)(0x80 | (wc & 0x3f));
5320 29018 wc = wc >> 6;
5321 29018 wc |= 0x800;
5322 [[fallthrough]];
5323 31372 case 2:
5324 31372 r[1] = (uchar)(0x80 | (wc & 0x3f));
5325 31372 wc = wc >> 6;
5326 31372 wc |= 0xc0;
5327 [[fallthrough]];
5328 375119217 case 1:
5329 375119217 r[0] = (uchar)wc;
5330 }
5331 375119214 return count;
5332 }
5333
5334 342884740 static inline void my_tolower_utf8mb3(const MY_UNICASE_INFO *uni_plane,
5335 my_wc_t *wc) {
5336 const MY_UNICASE_CHARACTER *page;
5337
2/2
✓ Branch 0 taken 342669658 times.
✓ Branch 1 taken 215082 times.
342884740 if ((page = uni_plane->page[(*wc >> 8) & 0xFF]))
5338 342669658 *wc = page[*wc & 0xFF].tolower;
5339 342884740 }
5340
5341 32803600 static inline void my_toupper_utf8mb3(const MY_UNICASE_INFO *uni_plane,
5342 my_wc_t *wc) {
5343 const MY_UNICASE_CHARACTER *page;
5344
2/2
✓ Branch 0 taken 32700135 times.
✓ Branch 1 taken 103465 times.
32803600 if ((page = uni_plane->page[(*wc >> 8) & 0xFF]))
5345 32700135 *wc = page[*wc & 0xFF].toupper;
5346 32803600 }
5347
5348 extern "C" {
5349 245629 static size_t my_caseup_utf8mb3(const CHARSET_INFO *cs, char *src,
5350 size_t srclen, char *dst, size_t dstlen) {
5351 my_wc_t wc;
5352 int srcres, dstres;
5353 245629 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
5354 245629 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5355
3/4
✓ Branch 0 taken 245623 times.
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 245623 times.
245629 assert(src != dst || cs->caseup_multiply == 1);
5356
5357
4/4
✓ Branch 0 taken 127666 times.
✓ Branch 1 taken 245629 times.
✓ Branch 2 taken 127666 times.
✓ Branch 3 taken 245629 times.
500961 while ((src < srcend) &&
5358
2/4
✓ Branch 0 taken 127666 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 127666 times.
✗ Branch 3 not taken.
127666 (srcres = my_mb_wc_utf8mb3(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
5359 127666 my_toupper_utf8mb3(uni_plane, &wc);
5360
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 127666 times.
127666 if ((dstres = my_uni_utf8mb3(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
5361 break;
5362 127666 src += srcres;
5363 127666 dst += dstres;
5364 }
5365 245629 return (size_t)(dst - dst0);
5366 }
5367
5368 79030308 static void my_hash_sort_utf8mb3(const CHARSET_INFO *cs, const uchar *s,
5369 size_t slen, uint64 *n1, uint64 *n2) {
5370 my_wc_t wc;
5371 int res;
5372 79030308 const uchar *e = s + slen;
5373 79030308 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5374 uint64 tmp1;
5375 uint64 tmp2;
5376
5377 /*
5378 Remove end space. We have to do this to be able to compare
5379 'A ' and 'A' as identical
5380 */
5381
4/4
✓ Branch 0 taken 79057589 times.
✓ Branch 1 taken 10834 times.
✓ Branch 2 taken 38115 times.
✓ Branch 3 taken 79019474 times.
79068423 while (e > s && e[-1] == ' ') e--;
5382
5383 79030308 tmp1 = *n1;
5384 79030308 tmp2 = *n2;
5385
5386
6/8
✓ Branch 0 taken 1774158361 times.
✓ Branch 1 taken 79029955 times.
✓ Branch 2 taken 1774158509 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 1774158805 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 1774158707 times.
✓ Branch 7 taken 79029757 times.
1853188316 while ((s < e) && (res = my_mb_wc_utf8mb3(&wc, s, e)) > 0) {
5387 1774158707 my_tosort_unicode(uni_plane, &wc, cs->state);
5388 1774158008 tmp1 ^= (((tmp1 & 63) + tmp2) * (wc & 0xFF)) + (tmp1 << 8);
5389 1774158008 tmp2 += 3;
5390 1774158008 tmp1 ^= (((tmp1 & 63) + tmp2) * (wc >> 8)) + (tmp1 << 8);
5391 1774158008 tmp2 += 3;
5392 1774158008 s += res;
5393 }
5394
5395 79029757 *n1 = tmp1;
5396 79029757 *n2 = tmp2;
5397 79029757 }
5398
5399 2808763 static size_t my_caseup_str_utf8mb3(const CHARSET_INFO *cs, char *src) {
5400 my_wc_t wc;
5401 int srcres, dstres;
5402 2808763 char *dst = src, *dst0 = src;
5403 2808763 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5404
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 2808763 times.
2808763 assert(cs->caseup_multiply == 1);
5405
5406
6/8
✓ Branch 0 taken 32675934 times.
✓ Branch 1 taken 2808763 times.
✓ Branch 2 taken 32675934 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 32675934 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 32675934 times.
✓ Branch 7 taken 2808763 times.
35484697 while (*src && (srcres = my_mb_wc_utf8mb3_no_range(&wc, (uchar *)src)) > 0) {
5407 32675934 my_toupper_utf8mb3(uni_plane, &wc);
5408
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 32675934 times.
32675934 if ((dstres = my_uni_utf8mb3_no_range(cs, wc, (uchar *)dst)) <= 0) break;
5409 32675934 src += srcres;
5410 32675934 dst += dstres;
5411 }
5412 2808763 *dst = '\0';
5413 2808763 return (size_t)(dst - dst0);
5414 }
5415
5416 251726 static size_t my_casedn_utf8mb3(const CHARSET_INFO *cs, char *src,
5417 size_t srclen, char *dst, size_t dstlen) {
5418 my_wc_t wc;
5419 int srcres, dstres;
5420 251726 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
5421 251726 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5422
3/4
✓ Branch 0 taken 251720 times.
✓ Branch 1 taken 6 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 251720 times.
251726 assert(src != dst || cs->casedn_multiply == 1);
5423
5424
4/4
✓ Branch 0 taken 199287 times.
✓ Branch 1 taken 251726 times.
✓ Branch 2 taken 199287 times.
✓ Branch 3 taken 251726 times.
650300 while ((src < srcend) &&
5425
2/4
✓ Branch 0 taken 199287 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 199287 times.
✗ Branch 3 not taken.
199287 (srcres = my_mb_wc_utf8mb3(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
5426 199287 my_tolower_utf8mb3(uni_plane, &wc);
5427
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 199287 times.
199287 if ((dstres = my_uni_utf8mb3(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
5428 break;
5429 199287 src += srcres;
5430 199287 dst += dstres;
5431 }
5432 251726 return (size_t)(dst - dst0);
5433 }
5434
5435 28608510 static size_t my_casedn_str_utf8mb3(const CHARSET_INFO *cs, char *src) {
5436 my_wc_t wc;
5437 int srcres, dstres;
5438 28608510 char *dst = src, *dst0 = src;
5439 28608510 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5440
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 28608510 times.
28608510 assert(cs->casedn_multiply == 1);
5441
5442
6/8
✓ Branch 0 taken 342443289 times.
✓ Branch 1 taken 28608512 times.
✓ Branch 2 taken 342443293 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 342443296 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 342443296 times.
✓ Branch 7 taken 28608509 times.
371051801 while (*src && (srcres = my_mb_wc_utf8mb3_no_range(&wc, (uchar *)src)) > 0) {
5443 342443296 my_tolower_utf8mb3(uni_plane, &wc);
5444
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 342443291 times.
342443254 if ((dstres = my_uni_utf8mb3_no_range(cs, wc, (uchar *)dst)) <= 0) break;
5445 342443291 src += srcres;
5446 342443291 dst += dstres;
5447 }
5448
5449 /*
5450 In rare cases lower string can be shorter than
5451 the original string, for example:
5452
5453 "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
5454 (which is 0xC4B0 in utf8, i.e. two bytes)
5455
5456 is converted into
5457
5458 "U+0069 LATIN SMALL LETTER I"
5459 (which is 0x69 in utf8, i.e. one byte)
5460
5461 So, we need to put '\0' terminator after converting.
5462 */
5463
5464 28608509 *dst = '\0';
5465 28608509 return (size_t)(dst - dst0);
5466 }
5467
5468 49718252 static int my_strnncoll_utf8mb3(const CHARSET_INFO *cs, const uchar *s,
5469 size_t slen, const uchar *t, size_t tlen,
5470 bool t_is_prefix) {
5471 int s_res, t_res;
5472 49718252 my_wc_t s_wc = 0, t_wc = 0;
5473 49718252 const uchar *se = s + slen;
5474 49718252 const uchar *te = t + tlen;
5475 49718252 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5476
5477
4/4
✓ Branch 0 taken 413768597 times.
✓ Branch 1 taken 28694001 times.
✓ Branch 2 taken 413612431 times.
✓ Branch 3 taken 156166 times.
442462598 while (s < se && t < te) {
5478
1/2
✓ Branch 0 taken 413612466 times.
✗ Branch 1 not taken.
413612431 s_res = my_mb_wc_utf8mb3(&s_wc, s, se);
5479
1/2
✓ Branch 0 taken 413612418 times.
✗ Branch 1 not taken.
413612466 t_res = my_mb_wc_utf8mb3(&t_wc, t, te);
5480
5481
3/4
✓ Branch 0 taken 413611831 times.
✓ Branch 1 taken 587 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 413612428 times.
413612418 if (s_res <= 0 || t_res <= 0) {
5482 /* Incorrect string, compare byte by byte value */
5483 return bincmp(s, se, t, te);
5484 }
5485
5486 413612428 my_tosort_unicode(uni_plane, &s_wc, cs->state);
5487 413612413 my_tosort_unicode(uni_plane, &t_wc, cs->state);
5488
5489
2/2
✓ Branch 0 taken 20867470 times.
✓ Branch 1 taken 392744346 times.
413611816 if (s_wc != t_wc) {
5490
2/2
✓ Branch 0 taken 7219548 times.
✓ Branch 1 taken 13647922 times.
20867470 return s_wc > t_wc ? 1 : -1;
5491 }
5492
5493 392744346 s += s_res;
5494 392744346 t += t_res;
5495 }
5496
2/2
✓ Branch 0 taken 100 times.
✓ Branch 1 taken 28850067 times.
28850167 return (int)(t_is_prefix ? t - te : ((se - s) - (te - t)));
5497 }
5498
5499 /*
5500 Compare strings, discarding end space
5501
5502 SYNOPSIS
5503 my_strnncollsp_utf8mb3()
5504 cs character set handler
5505 a First string to compare
5506 a_length Length of 'a'
5507 b Second string to compare
5508 b_length Length of 'b'
5509
5510 IMPLEMENTATION
5511 If one string is shorter as the other, then we space extend the other
5512 so that the strings have equal length.
5513
5514 This will ensure that the following things hold:
5515
5516 "a" == "a "
5517 "a\0" < "a"
5518 "a\0" < "a "
5519
5520 RETURN
5521 < 0 a < b
5522 = 0 a == b
5523 > 0 a > b
5524 */
5525
5526 617400167 static int my_strnncollsp_utf8mb3(const CHARSET_INFO *cs, const uchar *s,
5527 size_t slen, const uchar *t, size_t tlen) {
5528 int s_res, t_res, res;
5529 617400167 my_wc_t s_wc = 0, t_wc = 0;
5530 617400167 const uchar *se = s + slen, *te = t + tlen;
5531 617400167 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5532
5533
4/4
✓ Branch 0 taken 5606852356 times.
✓ Branch 1 taken 301978285 times.
✓ Branch 2 taken 5601623125 times.
✓ Branch 3 taken 5229231 times.
5908830641 while (s < se && t < te) {
5534
1/2
✓ Branch 0 taken 5601622401 times.
✗ Branch 1 not taken.
5601623125 s_res = my_mb_wc_utf8mb3(&s_wc, s, se);
5535
1/2
✓ Branch 0 taken 5601622979 times.
✗ Branch 1 not taken.
5601622401 t_res = my_mb_wc_utf8mb3(&t_wc, t, te);
5536
5537
3/4
✓ Branch 0 taken 5601623981 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 1042 times.
✓ Branch 3 taken 5601622939 times.
5601622979 if (s_res <= 0 || t_res <= 0) {
5538 /* Incorrect string, compare byte by byte value */
5539
1/2
✓ Branch 0 taken 964 times.
✗ Branch 1 not taken.
61 return bincmp(s, se, t, te);
5540 }
5541
5542 5601622939 my_tosort_unicode(uni_plane, &s_wc, cs->state);
5543 5601617644 my_tosort_unicode(uni_plane, &t_wc, cs->state);
5544
5545
2/2
✓ Branch 0 taken 310194564 times.
✓ Branch 1 taken 5291430474 times.
5601625038 if (s_wc != t_wc) {
5546
2/2
✓ Branch 0 taken 106402567 times.
✓ Branch 1 taken 203791997 times.
310194564 return s_wc > t_wc ? 1 : -1;
5547 }
5548
5549 5291430474 s += s_res;
5550 5291430474 t += t_res;
5551 }
5552
5553 307207516 slen = (size_t)(se - s);
5554 307207516 tlen = (size_t)(te - t);
5555 307207516 res = 0;
5556
5557
2/2
✓ Branch 0 taken 14991817 times.
✓ Branch 1 taken 292215699 times.
307207516 if (slen != tlen) {
5558 14991817 int swap = 1;
5559
2/2
✓ Branch 0 taken 9760504 times.
✓ Branch 1 taken 5231313 times.
14991817 if (slen < tlen) {
5560 9760504 slen = tlen;
5561 9760504 s = t;
5562 9760504 se = te;
5563 9760504 swap = -1;
5564 9760504 res = -res;
5565 }
5566 /*
5567 This following loop uses the fact that in UTF-8
5568 all multibyte characters are greater than space,
5569 and all multibyte head characters are greater than
5570 space. It means if we meet a character greater
5571 than space, it always means that the longer string
5572 is greater. So we can reuse the same loop from the
5573 8bit version, without having to process full multibyte
5574 sequences.
5575 */
5576
2/2
✓ Branch 0 taken 20364145 times.
✓ Branch 1 taken 2127 times.
20366272 for (; s < se; s++) {
5577
4/4
✓ Branch 0 taken 14989690 times.
✓ Branch 1 taken 5374455 times.
✓ Branch 2 taken 37 times.
✓ Branch 3 taken 14989653 times.
20364145 if (*s != ' ') return (*s < ' ') ? -swap : swap;
5578 }
5579 }
5580 292217826 return res;
5581 }
5582
5583 /*
5584 Compare 0-terminated UTF8 strings.
5585
5586 SYNOPSIS
5587 my_strcasecmp_utf8mb3()
5588 cs character set handler
5589 s First 0-terminated string to compare
5590 t Second 0-terminated string to compare
5591
5592 IMPLEMENTATION
5593
5594 RETURN
5595 - negative number if s < t
5596 - positive number if s > t
5597 - 0 is the strings are equal
5598 */
5599
5600 3126078733 static int my_strcasecmp_utf8mb3(const CHARSET_INFO *cs, const char *s,
5601 const char *t) {
5602 3126078733 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5603
4/4
✓ Branch 0 taken 19118150945 times.
✓ Branch 1 taken 760088932 times.
✓ Branch 2 taken 19112670845 times.
✓ Branch 3 taken 5480100 times.
19878239877 while (s[0] && t[0]) {
5604 my_wc_t s_wc, t_wc;
5605
5606
2/2
✓ Branch 0 taken 19112544254 times.
✓ Branch 1 taken 126591 times.
19112670845 if ((uchar)s[0] < 128) {
5607 /*
5608 s[0] is between 0 and 127.
5609 It represents a single byte character.
5610 Convert it into weight according to collation.
5611 */
5612 19112544254 s_wc = plane00[(uchar)s[0]].tolower;
5613 19112544254 s++;
5614 } else {
5615 int res;
5616
5617 /*
5618 Scan a multibyte character.
5619
5620 In the future it is worth to write a special version of
5621 my_mb_wc_utf8mb3() for 0-terminated strings which will not
5622 take in account length. Now we call the regular version of
5623 my_mb_wc_utf8mb3() with s+3 in the last argument. s+3 is enough
5624 to scan any multibyte sequence.
5625
5626 Calling the regular version of my_mb_wc_utf8mb3 is safe for
5627 0-terminated strings: we will never lose the end of the
5628 string: If we have 0 character in the middle of a multibyte
5629 sequence, then my_mb_wc_utf8mb3 will always return a negative
5630 number, so the loop with finish.
5631 */
5632
5633
1/2
✓ Branch 0 taken 126591 times.
✗ Branch 1 not taken.
126591 res = my_mb_wc_utf8mb3(&s_wc, (const uchar *)s, (const uchar *)s + 3);
5634
5635 /*
5636 In the case of wrong multibyte sequence we will
5637 call strcmp() for byte-to-byte comparison.
5638 */
5639
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 126591 times.
2360649099 if (res <= 0) return strcmp(s, t);
5640 126591 s += res;
5641
5642 /* Convert Unicode code into weight according to collation */
5643 126591 my_tolower_utf8mb3(uni_plane, &s_wc);
5644 }
5645
5646 /* Do the same for the second string */
5647
5648
2/2
✓ Branch 0 taken 19112558863 times.
✓ Branch 1 taken 115603 times.
19112674466 if ((uchar)t[0] < 128) {
5649 /* Convert single byte character into weight */
5650 19112558863 t_wc = plane00[(uchar)t[0]].tolower;
5651 19112558863 t++;
5652 } else {
5653
1/2
✓ Branch 0 taken 115603 times.
✗ Branch 1 not taken.
115603 int res = my_mb_wc_utf8mb3(&t_wc, (const uchar *)t, (const uchar *)t + 3);
5654
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 115603 times.
115603 if (res <= 0) return strcmp(s, t);
5655 115603 t += res;
5656
5657 /* Convert code into weight */
5658 115603 my_tolower_utf8mb3(uni_plane, &t_wc);
5659 }
5660
5661 /* Now we have two weights, let's compare them */
5662
2/2
✓ Branch 0 taken 2360522508 times.
✓ Branch 1 taken 16752161144 times.
19112683652 if (s_wc != t_wc) return ((int)s_wc) - ((int)t_wc);
5663 }
5664 765569032 return ((int)(uchar)s[0]) - ((int)(uchar)t[0]);
5665 }
5666
5667 1191870 static int my_wildcmp_utf8mb3(const CHARSET_INFO *cs, const char *str,
5668 const char *str_end, const char *wildstr,
5669 const char *wildend, int escape, int w_one,
5670 int w_many) {
5671 1191870 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
5672 1191870 return my_wildcmp_unicode(cs, str, str_end, wildstr, wildend, escape, w_one,
5673 1191870 w_many, uni_plane);
5674 }
5675
5676 2044309 static size_t my_strnxfrmlen_utf8mb3(const CHARSET_INFO *cs [[maybe_unused]],
5677 size_t len) {
5678 // We really ought to have len % 3 == 0, but not all calling code conforms.
5679 2044309 return ((len + 2) / 3) * 2;
5680 }
5681 } // extern "C"
5682
5683 extern "C" {
5684 381754075 static size_t my_well_formed_len_utf8mb3(const CHARSET_INFO *, const char *b,
5685 const char *e, size_t pos,
5686 int *error) {
5687 381754075 const char *b_start = b;
5688 381754075 *error = 0;
5689
2/2
✓ Branch 0 taken 14772632811 times.
✓ Branch 1 taken 162159111 times.
14934791922 while (pos) {
5690 int mb_len;
5691
5692 14772632811 if ((mb_len = my_valid_mbcharlen_utf8mb3(pointer_cast<const uchar *>(b),
5693
2/2
✓ Branch 0 taken 219597704 times.
✓ Branch 1 taken 14553037847 times.
14772635551 pointer_cast<const uchar *>(e))) <=
5694 0) {
5695
2/2
✓ Branch 0 taken 341 times.
✓ Branch 1 taken 219597363 times.
219597704 *error = b < e ? 1 : 0;
5696 219597704 break;
5697 }
5698 14553037847 b += mb_len;
5699 14553037847 pos--;
5700 }
5701 381756815 return (size_t)(b - b_start);
5702 }
5703
5704 3288636050 static uint my_ismbchar_utf8mb3(const CHARSET_INFO *, const char *b,
5705 const char *e) {
5706 3288636050 int res = my_valid_mbcharlen_utf8mb3((const uchar *)b, (const uchar *)e);
5707
2/2
✓ Branch 0 taken 54923935 times.
✓ Branch 1 taken 3233712688 times.
3288636623 return (res > 1) ? res : 0;
5708 }
5709
5710 1576916794 static uint my_mbcharlen_utf8mb3(const CHARSET_INFO *cs [[maybe_unused]],
5711 uint c) {
5712
2/2
✓ Branch 0 taken 1532773395 times.
✓ Branch 1 taken 44143399 times.
1576916794 if (c < 0x80)
5713 1532773395 return 1;
5714
2/2
✓ Branch 0 taken 22387302 times.
✓ Branch 1 taken 21756097 times.
44143399 else if (c < 0xc2)
5715 22387302 return 0; /* Illegal mb head */
5716
2/2
✓ Branch 0 taken 10437801 times.
✓ Branch 1 taken 11318296 times.
21756097 else if (c < 0xe0)
5717 10437801 return 2;
5718
2/2
✓ Branch 0 taken 5554443 times.
✓ Branch 1 taken 5763853 times.
11318296 else if (c < 0xf0)
5719 5554443 return 3;
5720 5763853 return 0; /* Illegal mb head */
5721 ;
5722 }
5723 } // extern "C"
5724
5725 static MY_COLLATION_HANDLER my_collation_utf8_general_ci_handler = {
5726 nullptr, /* init */
5727 nullptr,
5728 my_strnncoll_utf8mb3,
5729 my_strnncollsp_utf8mb3,
5730 my_strnxfrm_unicode,
5731 my_strnxfrmlen_utf8mb3,
5732 my_like_range_mb,
5733 my_wildcmp_utf8mb3,
5734 my_strcasecmp_utf8mb3,
5735 my_instr_mb,
5736 my_hash_sort_utf8mb3,
5737 my_propagate_complex};
5738
5739 static MY_COLLATION_HANDLER my_collation_utf8_bin_handler = {
5740 nullptr, /* init */
5741 nullptr,
5742 my_strnncoll_mb_bin,
5743 my_strnncollsp_mb_bin,
5744 my_strnxfrm_unicode,
5745 my_strnxfrmlen_utf8mb3,
5746 my_like_range_mb,
5747 my_wildcmp_mb_bin,
5748 my_strcasecmp_mb_bin,
5749 my_instr_mb,
5750 my_hash_sort_mb_bin,
5751 my_propagate_simple};
5752
5753 MY_CHARSET_HANDLER my_charset_utf8_handler = {nullptr, /* init */
5754 my_ismbchar_utf8mb3,
5755 my_mbcharlen_utf8mb3,
5756 my_numchars_mb,
5757 my_charpos_mb3,
5758 my_well_formed_len_utf8mb3,
5759 my_lengthsp_8bit,
5760 my_numcells_mb,
5761 my_mb_wc_utf8mb3_thunk,
5762 my_uni_utf8mb3,
5763 my_mb_ctype_mb,
5764 my_caseup_str_utf8mb3,
5765 my_casedn_str_utf8mb3,
5766 my_caseup_utf8mb3,
5767 my_casedn_utf8mb3,
5768 my_snprintf_8bit,
5769 my_long10_to_str_8bit,
5770 my_longlong10_to_str_8bit,
5771 my_fill_8bit,
5772 my_strntol_8bit,
5773 my_strntoul_8bit,
5774 my_strntoll_8bit,
5775 my_strntoull_8bit,
5776 my_strntod_8bit,
5777 my_strtoll10_8bit,
5778 my_strntoull10rnd_8bit,
5779 my_scan_8bit};
5780
5781 CHARSET_INFO my_charset_utf8_general_ci = {
5782 33,
5783 0,
5784 0, /* number */
5785 MY_CS_COMPILED | MY_CS_PRIMARY | MY_CS_STRNXFRM | MY_CS_UNICODE, /* state */
5786 "utf8mb3", /* cs name */
5787 "utf8mb3_general_ci", /* m_coll_name */
5788 "UTF-8 Unicode", /* comment */
5789 nullptr, /* tailoring */
5790 nullptr, /* coll_param */
5791 ctype_utf8mb3, /* ctype */
5792 to_lower_utf8mb3, /* to_lower */
5793 to_upper_utf8mb3, /* to_upper */
5794 to_upper_utf8mb3, /* sort_order */
5795 nullptr, /* uca */
5796 nullptr, /* tab_to_uni */
5797 nullptr, /* tab_from_uni */
5798 &my_unicase_default, /* caseinfo */
5799 nullptr, /* state_map */
5800 nullptr, /* ident_map */
5801 1, /* strxfrm_multiply */
5802 1, /* caseup_multiply */
5803 1, /* casedn_multiply */
5804 1, /* mbminlen */
5805 3, /* mbmaxlen */
5806 1, /* mbmaxlenlen */
5807 0, /* min_sort_char */
5808 0xFFFF, /* max_sort_char */
5809 ' ', /* pad char */
5810 false, /* escape_with_backslash_is_dangerous */
5811 1, /* levels_for_compare */
5812 &my_charset_utf8_handler,
5813 &my_collation_utf8_general_ci_handler,
5814 PAD_SPACE};
5815
5816 CHARSET_INFO my_charset_utf8_tolower_ci = {
5817 76,
5818 0,
5819 0, /* number */
5820 MY_CS_COMPILED | MY_CS_STRNXFRM | MY_CS_UNICODE | MY_CS_LOWER_SORT,
5821 "utf8mb3", /* cs name */
5822 "utf8mb3_tolower_ci", /* m_coll_name */
5823 "UTF-8 Unicode", /* comment */
5824 nullptr, /* tailoring */
5825 nullptr, /* coll_param */
5826 ctype_utf8mb3, /* ctype */
5827 to_lower_utf8mb3, /* to_lower */
5828 to_upper_utf8mb3, /* to_upper */
5829 to_upper_utf8mb3, /* sort_order */
5830 nullptr, /* uca */
5831 nullptr, /* tab_to_uni */
5832 nullptr, /* tab_from_uni */
5833 &my_unicase_default, /* caseinfo */
5834 nullptr, /* state_map */
5835 nullptr, /* ident_map */
5836 1, /* strxfrm_multiply */
5837 1, /* caseup_multiply */
5838 1, /* casedn_multiply */
5839 1, /* mbminlen */
5840 3, /* mbmaxlen */
5841 1, /* mbmaxlenlen */
5842 0, /* min_sort_char */
5843 0xFFFF, /* max_sort_char */
5844 ' ', /* pad char */
5845 false, /* escape_with_backslash_is_dangerous */
5846 1, /* levels_for_compare */
5847 &my_charset_utf8_handler,
5848 &my_collation_utf8_general_ci_handler,
5849 PAD_SPACE};
5850
5851 CHARSET_INFO my_charset_utf8_general_mysql500_ci = {
5852 223,
5853 0,
5854 0, /* number */
5855 MY_CS_COMPILED | MY_CS_STRNXFRM | MY_CS_UNICODE, /* state */
5856 "utf8mb3", /* cs name */
5857 "utf8mb3_general_mysql500_ci", /* m_coll_name */
5858 "UTF-8 Unicode", /* comment */
5859 nullptr, /* tailoring */
5860 nullptr, /* coll_param */
5861 ctype_utf8mb3, /* ctype */
5862 to_lower_utf8mb3, /* to_lower */
5863 to_upper_utf8mb3, /* to_upper */
5864 to_upper_utf8mb3, /* sort_order */
5865 nullptr, /* uca */
5866 nullptr, /* tab_to_uni */
5867 nullptr, /* tab_from_uni */
5868 &my_unicase_mysql500, /* caseinfo */
5869 nullptr, /* state_map */
5870 nullptr, /* ident_map */
5871 1, /* strxfrm_multiply */
5872 1, /* caseup_multiply */
5873 1, /* casedn_multiply */
5874 1, /* mbminlen */
5875 3, /* mbmaxlen */
5876 1, /* mbmaxlenlen */
5877 0, /* min_sort_char */
5878 0xFFFF, /* max_sort_char */
5879 ' ', /* pad char */
5880 false, /* escape_with_backslash_is_dangerous */
5881 1, /* levels_for_compare */
5882 &my_charset_utf8_handler,
5883 &my_collation_utf8_general_ci_handler,
5884 PAD_SPACE};
5885
5886 CHARSET_INFO my_charset_utf8_bin = {
5887 83,
5888 0,
5889 0, /* number */
5890 MY_CS_COMPILED | MY_CS_BINSORT | MY_CS_STRNXFRM | MY_CS_UNICODE, /* state */
5891 "utf8mb3", /* cs name */
5892 "utf8mb3_bin", /* m_coll_name */
5893 "UTF-8 Unicode", /* comment */
5894 nullptr, /* tailoring */
5895 nullptr, /* coll_param */
5896 ctype_utf8mb3, /* ctype */
5897 to_lower_utf8mb3, /* to_lower */
5898 to_upper_utf8mb3, /* to_upper */
5899 nullptr, /* sort_order */
5900 nullptr, /* uca */
5901 nullptr, /* tab_to_uni */
5902 nullptr, /* tab_from_uni */
5903 &my_unicase_default, /* caseinfo */
5904 nullptr, /* state_map */
5905 nullptr, /* ident_map */
5906 1, /* strxfrm_multiply */
5907 1, /* caseup_multiply */
5908 1, /* casedn_multiply */
5909 1, /* mbminlen */
5910 3, /* mbmaxlen */
5911 1, /* mbmaxlenlen */
5912 0, /* min_sort_char */
5913 0xFFFF, /* max_sort_char */
5914 ' ', /* pad char */
5915 false, /* escape_with_backslash_is_dangerous */
5916 1, /* levels_for_compare */
5917 &my_charset_utf8_handler,
5918 &my_collation_utf8_bin_handler,
5919 PAD_SPACE};
5920
5921 /*
5922 File system encoding components:
5923
5924 Code range Pattern Number Used Unused Blocks
5925 -----------------------------------------------------------------------------
5926 00C0..017F [.][0..4][g..z] 5*20= 100 97 3 Latin1 Supplement + Ext A
5927 0370..03FF [.][5..9][g..z] 5*20= 100 88 12 Greek + Coptic
5928 0400..052F [.][g..z][0..6] 20*7= 140 140 137 Cyrillic
5929 0530..058F [.][g..z][7..8] 20*2= 40 38 2 Armenian
5930 2160..217F [.][g..z][9] 20*1= 20 16 4 Number Forms
5931 0180..02AF [.][g..z][a..k] 28*11=220 203 17 Latin Ext B + IPA
5932 1E00..0EFF [.][g..z][l..r] 20*7= 140 136 4 Latin Additional Extended
5933 1F00..1FFF [.][g..z][s..z] 20*8= 160 144 16 Greek Extended
5934 .... .... [.][a..f][g..z] 6*20= 120 0 120 RESERVED
5935 24B6..24E9 [.][@][a..z] 26 26 0 Enclosed Alphanumerics
5936 FF21..FF5A [.][a..z][@] 26 26 0 Full Width forms
5937
5938 All other characters are encoded using five bytes:
5939
5940 [.][0..9a..z][0..9a..z][0..9a..z][0..9a..z]
5941
5942 */
5943
5944 static const uint16 touni[5994] = {
5945 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5946 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5947 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00C0, 0x00C1, 0x00C2, 0x00C3,
5948 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC,
5949 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x0000, 0x0000,
5950 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5951 0x0000, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7,
5952 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0,
5953 0x00F1, 0x00F2, 0x00F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5954 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5955 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5956 0x0000, 0x0000, 0x0000, 0x0000, 0x00D4, 0x00D5, 0x00D6, 0x0000, 0x00D8,
5957 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x0178, 0x0100, 0x0102,
5958 0x0104, 0x0106, 0x0108, 0x010A, 0x010C, 0x010E, 0x0000, 0x0000, 0x0000,
5959 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5960 0x00F4, 0x00F5, 0x00F6, 0x00DF, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC,
5961 0x00FD, 0x00FE, 0x00FF, 0x0101, 0x0103, 0x0105, 0x0107, 0x0109, 0x010B,
5962 0x010D, 0x010F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5963 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5964 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5965 0x0000, 0x0000, 0x0000, 0x0110, 0x0112, 0x0114, 0x0116, 0x0118, 0x011A,
5966 0x011C, 0x011E, 0x0120, 0x0122, 0x0124, 0x0126, 0x0128, 0x012A, 0x012C,
5967 0x012E, 0x0000, 0x0132, 0x0134, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000,
5968 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0111,
5969 0x0113, 0x0115, 0x0117, 0x0119, 0x011B, 0x011D, 0x011F, 0x0121, 0x0123,
5970 0x0125, 0x0127, 0x0129, 0x012B, 0x012D, 0x012F, 0x0131, 0x0133, 0x0135,
5971 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5972 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5973 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5974 0x0000, 0x0000, 0x0000, 0x0139, 0x013B, 0x013D, 0x013F, 0x0141, 0x0143,
5975 0x0145, 0x0147, 0x0000, 0x014A, 0x014C, 0x014E, 0x0150, 0x0152, 0x0154,
5976 0x0156, 0x0158, 0x015A, 0x015C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5977 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0138, 0x013A,
5978 0x013C, 0x013E, 0x0140, 0x0142, 0x0144, 0x0146, 0x0148, 0x0149, 0x014B,
5979 0x014D, 0x014F, 0x0151, 0x0153, 0x0155, 0x0157, 0x0159, 0x015B, 0x015D,
5980 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5981 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5982 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5983 0x0000, 0x015E, 0x0160, 0x0162, 0x0164, 0x0166, 0x0168, 0x016A, 0x016C,
5984 0x016E, 0x0170, 0x0172, 0x0174, 0x0176, 0x0179, 0x017B, 0x017D, 0x0000,
5985 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5986 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x015F, 0x0161, 0x0163,
5987 0x0165, 0x0167, 0x0169, 0x016B, 0x016D, 0x016F, 0x0171, 0x0173, 0x0175,
5988 0x0177, 0x017A, 0x017C, 0x017E, 0x017F, 0x0000, 0x0000, 0x0000, 0x0000,
5989 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5990 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5991 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5992 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5993 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5994 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5995 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5996 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5997 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0390, 0x0000, 0x0000, 0x0000,
5998 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
5999 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6000 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0386,
6001 0x0388, 0x0389, 0x038A, 0x0000, 0x0391, 0x0000, 0x0393, 0x0394, 0x0395,
6002 0x0396, 0x0397, 0x0000, 0x0399, 0x0000, 0x039B, 0x039C, 0x039D, 0x039E,
6003 0x039F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6004 0x0000, 0x0000, 0x0000, 0x0000, 0x03AC, 0x03AD, 0x03AE, 0x03AF, 0x03B0,
6005 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9,
6006 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x0000, 0x0000, 0x0000,
6007 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6008 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6009 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03A1,
6010 0x0000, 0x0000, 0x03A4, 0x03A5, 0x0000, 0x03A7, 0x03A8, 0x03A9, 0x03AA,
6011 0x03AB, 0x038C, 0x038E, 0x038F, 0x0000, 0x0392, 0x0398, 0x03D2, 0x03D3,
6012 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6013 0x0000, 0x0000, 0x0000, 0x03C0, 0x03C1, 0x03C2, 0x03C3, 0x03C4, 0x03C5,
6014 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x03CA, 0x03CB, 0x03CC, 0x03CD, 0x03CE,
6015 0x0000, 0x03D0, 0x03D1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6016 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6017 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6018 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03D4, 0x03A6, 0x03A0,
6019 0x0000, 0x0000, 0x03DA, 0x03DC, 0x03DE, 0x03E0, 0x03E2, 0x03E4, 0x03E6,
6020 0x03E8, 0x03EA, 0x03EC, 0x03EE, 0x039A, 0x0000, 0x03A3, 0x0000, 0x0000,
6021 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6022 0x0000, 0x0000, 0x0000, 0x03D5, 0x03D6, 0x03D7, 0x03D9, 0x03DB, 0x03DD,
6023 0x03DF, 0x03E1, 0x03E3, 0x03E5, 0x03E7, 0x03E9, 0x03EB, 0x03ED, 0x03EF,
6024 0x03F0, 0x03F1, 0x03F2, 0x03F3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6025 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6026 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6027 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6028 0x0000, 0x03FD, 0x03FE, 0x03FF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6029 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6030 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6031 0x0000, 0x03F5, 0x03F6, 0x03F8, 0x03FB, 0x03FC, 0x0000, 0x0000, 0x0000,
6032 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6033 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6034 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6035 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6036 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6037 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6038 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6039 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6040 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6041 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6042 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6043 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6044 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6045 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6046 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6047 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6048 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6049 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6050 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6051 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6052 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6053 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6054 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6055 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6056 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6057 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6058 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6059 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6060 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6061 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6062 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6063 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6064 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6065 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6066 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6067 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6068 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6069 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6070 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6071 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6072 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6073 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6074 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6075 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6076 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6077 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6078 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6079 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6080 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6081 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6082 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6083 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6084 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6085 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6086 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6087 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6088 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6089 0x0000, 0x24B6, 0x24B7, 0x24B8, 0x24B9, 0x24BA, 0x24BB, 0x24BC, 0x24BD,
6090 0x24BE, 0x24BF, 0x24C0, 0x24C1, 0x24C2, 0x24C3, 0x24C4, 0x24C5, 0x24C6,
6091 0x24C7, 0x24C8, 0x24C9, 0x24CA, 0x24CB, 0x24CC, 0x24CD, 0x24CE, 0x24CF,
6092 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x24D0, 0x24D1, 0x24D2,
6093 0x24D3, 0x24D4, 0x24D5, 0x24D6, 0x24D7, 0x24D8, 0x24D9, 0x24DA, 0x24DB,
6094 0x24DC, 0x24DD, 0x24DE, 0x24DF, 0x24E0, 0x24E1, 0x24E2, 0x24E3, 0x24E4,
6095 0x24E5, 0x24E6, 0x24E7, 0x24E8, 0x24E9, 0x0000, 0x0000, 0x0000, 0x0000,
6096 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6097 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF21,
6098 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6099 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6100 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6101 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6102 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6103 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6104 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6105 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6106 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF22, 0x0000,
6107 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6108 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6109 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6110 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6111 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6112 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6113 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6114 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6115 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF23, 0x0000, 0x0000,
6116 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6117 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6118 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6119 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6120 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6121 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6122 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6123 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6124 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF24, 0x0000, 0x0000, 0x0000,
6125 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6126 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6127 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6128 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6129 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6130 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6131 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6132 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6133 0x0000, 0x0000, 0x0000, 0x0000, 0xFF25, 0x0000, 0x0000, 0x0000, 0x0000,
6134 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6135 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6136 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6137 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6138 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6139 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6140 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6141 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6142 0x0000, 0x0000, 0x0000, 0xFF26, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6143 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6144 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6145 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6146 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6147 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6148 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6149 0x0000, 0x0000, 0x0000, 0x0000, 0x0410, 0x0424, 0x0408, 0x0478, 0x04A6,
6150 0x04CD, 0x04F4, 0x0000, 0x0544, 0x2160, 0x0000, 0x0000, 0x0000, 0x0000,
6151 0x0000, 0x0000, 0xFF27, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6152 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6153 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6154 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6155 0x01B3, 0x01DE, 0x0208, 0x0230, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6156 0x0000, 0x1E00, 0x1E28, 0x1E50, 0x1E78, 0x1E60, 0x1EBE, 0x1EE6, 0x1F08,
6157 0x1F2A, 0x0000, 0x1F6C, 0x1F88, 0x1FAC, 0x0000, 0x0000, 0x0000, 0x0000,
6158 0x0000, 0x0000, 0x0000, 0x0411, 0x0425, 0x0409, 0x047A, 0x04A8, 0x0000,
6159 0x04F6, 0x0531, 0x0545, 0x2161, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6160 0x0000, 0xFF28, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6161 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6162 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6163 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0182, 0x01B5,
6164 0x01E0, 0x020A, 0x0232, 0x0000, 0x0000, 0x019D, 0x0000, 0x0000, 0x0000,
6165 0x1E02, 0x1E2A, 0x1E52, 0x1E7A, 0x0000, 0x1EC0, 0x1EE8, 0x1F09, 0x1F2B,
6166 0x0000, 0x1F6D, 0x1F89, 0x1FAD, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6167 0x0000, 0x0000, 0x0412, 0x0426, 0x040A, 0x047C, 0x04AA, 0x04D0, 0x04F8,
6168 0x0532, 0x0546, 0x2162, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6169 0xFF29, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6170 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6171 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6172 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0184, 0x01B8, 0x01E2,
6173 0x020C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E04,
6174 0x1E2C, 0x1E54, 0x1E7C, 0x0000, 0x1EC2, 0x1EEA, 0x1F0A, 0x1F2C, 0x0000,
6175 0x1F6E, 0x1F8A, 0x1FAE, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6176 0x0000, 0x0413, 0x0427, 0x040B, 0x047E, 0x04AC, 0x04D2, 0x0000, 0x0533,
6177 0x0547, 0x2163, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2A,
6178 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6179 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6180 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6181 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0187, 0x0000, 0x01E4, 0x020E,
6182 0x0000, 0x0000, 0x0193, 0x0000, 0x01AE, 0x0000, 0x0000, 0x1E06, 0x1E2E,
6183 0x1E56, 0x1E7E, 0x0000, 0x1EC4, 0x1EEC, 0x1F0B, 0x1F2D, 0x0000, 0x1F6F,
6184 0x1F8B, 0x1FAF, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6185 0x0414, 0x0428, 0x040C, 0x0480, 0x04AE, 0x04D4, 0x0000, 0x0534, 0x0548,
6186 0x2164, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2B, 0x0000,
6187 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6188 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6189 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6190 0x0000, 0x0000, 0x0000, 0x0000, 0x018B, 0x0000, 0x01E6, 0x0210, 0x0000,
6191 0x0000, 0x0000, 0x019F, 0x0000, 0x0000, 0x0000, 0x1E08, 0x1E30, 0x1E58,
6192 0x1E80, 0x0000, 0x1EC6, 0x1EEE, 0x1F0C, 0x1F2E, 0x0000, 0x1FBA, 0x1F8C,
6193 0x1FB8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0415,
6194 0x0429, 0x040D, 0x0000, 0x04B0, 0x04D6, 0x0000, 0x0535, 0x0549, 0x2165,
6195 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2C, 0x0000, 0x0000,
6196 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6197 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6198 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6199 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01E8, 0x0212, 0x0000, 0x0000,
6200 0x0000, 0x0000, 0x01B1, 0x0000, 0x0000, 0x1E0A, 0x1E32, 0x1E5A, 0x1E82,
6201 0x1EA0, 0x1EC8, 0x1EF0, 0x1F0D, 0x1F2F, 0x1F59, 0x1FBB, 0x1F8D, 0x1FB9,
6202 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0416, 0x042A,
6203 0x040E, 0x048A, 0x04B2, 0x04D8, 0x0000, 0x0536, 0x054A, 0x2166, 0x0000,
6204 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2D, 0x0000, 0x0000, 0x0000,
6205 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6206 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6207 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6208 0x0000, 0x0000, 0x0191, 0x0000, 0x01EA, 0x0214, 0x0000, 0x0000, 0x0194,
6209 0x0000, 0x01B2, 0x0000, 0x0000, 0x1E0C, 0x1E34, 0x1E5C, 0x1E84, 0x1EA2,
6210 0x1ECA, 0x1EF2, 0x1F0E, 0x1F38, 0x0000, 0x1FC8, 0x1F8E, 0x0000, 0x0000,
6211 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0417, 0x042B, 0x040F,
6212 0x048C, 0x04B4, 0x04DA, 0x0000, 0x0537, 0x054B, 0x2167, 0x0000, 0x0000,
6213 0x0000, 0x0000, 0x0000, 0x0000, 0xFF2E, 0x0000, 0x0000, 0x0000, 0x0000,
6214 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6215 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6216 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6217 0x0000, 0x01F6, 0x01BC, 0x01EC, 0x0216, 0x0000, 0x0000, 0x0000, 0x0000,
6218 0x0000, 0x0000, 0x0000, 0x1E0E, 0x1E36, 0x1E5E, 0x1E86, 0x1EA4, 0x1ECC,
6219 0x1EF4, 0x1F0F, 0x1F39, 0x1F5B, 0x1FC9, 0x1F8F, 0x1FBC, 0x1FE8, 0x0000,
6220 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0418, 0x042C, 0x0460, 0x048E,
6221 0x04B6, 0x04DC, 0x0000, 0x0538, 0x054C, 0x2168, 0x0000, 0x0000, 0x0000,
6222 0x0000, 0x0000, 0x0000, 0xFF2F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6223 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6224 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6225 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6226 0x0198, 0x01C4, 0x01EE, 0x0218, 0x023A, 0x0000, 0x0000, 0x0000, 0x0000,
6227 0x0000, 0x0000, 0x1E10, 0x1E38, 0x0000, 0x1E88, 0x1EA6, 0x1ECE, 0x1EF6,
6228 0x1F18, 0x1F3A, 0x0000, 0x1FCA, 0x1F98, 0x0000, 0x1FE9, 0x0000, 0x0000,
6229 0x0000, 0x0000, 0x0000, 0x0000, 0x0419, 0x042D, 0x0462, 0x0490, 0x04B8,
6230 0x04DE, 0x0500, 0x0539, 0x054D, 0x2169, 0x0000, 0x0000, 0x0000, 0x0000,
6231 0x0000, 0x0000, 0xFF30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6232 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6233 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6234 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x023D,
6235 0x01C7, 0x0000, 0x021A, 0x023B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6236 0x0000, 0x1E12, 0x1E3A, 0x1E62, 0x1E8A, 0x1EA8, 0x1ED0, 0x1EF8, 0x1F19,
6237 0x1F3B, 0x1F5D, 0x1FCB, 0x1F99, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6238 0x0000, 0x0000, 0x0000, 0x041A, 0x042E, 0x0464, 0x0492, 0x04BA, 0x04E0,
6239 0x0502, 0x053A, 0x054E, 0x216A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6240 0x0000, 0xFF31, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6241 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6242 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6243 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01CA,
6244 0x01F1, 0x021C, 0x023E, 0x0181, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6245 0x1E14, 0x1E3C, 0x1E64, 0x1E8C, 0x1EAA, 0x1ED2, 0x0000, 0x1F1A, 0x1F3C,
6246 0x0000, 0x1FDA, 0x1F9A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6247 0x0000, 0x0000, 0x041B, 0x042F, 0x0466, 0x0494, 0x04BC, 0x04E2, 0x0504,
6248 0x053B, 0x054F, 0x216B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6249 0xFF32, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6250 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6251 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6252 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0220, 0x01CD, 0x01F4,
6253 0x021E, 0x0000, 0x0186, 0x0197, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E16,
6254 0x1E3E, 0x1E66, 0x1E8E, 0x1EAC, 0x1ED4, 0x0000, 0x1F1B, 0x1F3D, 0x1F5F,
6255 0x1FDB, 0x1F9B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6256 0x0000, 0x041C, 0x0400, 0x0468, 0x0496, 0x04BE, 0x04E4, 0x0506, 0x053C,
6257 0x0550, 0x216C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF33,
6258 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6259 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6260 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6261 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A0, 0x01CF, 0x01F8, 0x0000,
6262 0x0000, 0x0000, 0x0196, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E18, 0x1E40,
6263 0x1E68, 0x1E90, 0x1EAE, 0x1ED6, 0x0000, 0x1F1C, 0x1F3E, 0x0000, 0x1FF8,
6264 0x1F9C, 0x0000, 0x1FEC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6265 0x041D, 0x0401, 0x046A, 0x0498, 0x04C0, 0x04E6, 0x0508, 0x053D, 0x0551,
6266 0x216D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF34, 0x0000,
6267 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6268 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6269 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6270 0x0000, 0x0000, 0x0000, 0x0000, 0x01A2, 0x01D1, 0x01FA, 0x0222, 0x0000,
6271 0x0189, 0x0000, 0x0000, 0x01B7, 0x0000, 0x0000, 0x1E1A, 0x1E42, 0x1E6A,
6272 0x1E92, 0x1EB0, 0x1ED8, 0x0000, 0x1F1D, 0x1F3F, 0x0000, 0x1FF9, 0x1F9D,
6273 0x1FCC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x041E,
6274 0x0402, 0x046C, 0x049A, 0x04C1, 0x04E8, 0x050A, 0x053E, 0x0552, 0x216E,
6275 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF35, 0x0000, 0x0000,
6276 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6277 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6278 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6279 0x0000, 0x0000, 0x0000, 0x01A4, 0x01D3, 0x01FC, 0x0224, 0x0000, 0x018A,
6280 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1E1C, 0x1E44, 0x1E6C, 0x1E94,
6281 0x1EB2, 0x1EDA, 0x0000, 0x0000, 0x1F48, 0x0000, 0x1FEA, 0x1F9E, 0x0000,
6282 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x041F, 0x0403,
6283 0x046E, 0x049C, 0x04C3, 0x04EA, 0x050C, 0x053F, 0x0553, 0x216F, 0x0000,
6284 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF36, 0x0000, 0x0000, 0x0000,
6285 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6286 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6287 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6288 0x0000, 0x0000, 0x01A7, 0x01D5, 0x01FE, 0x0226, 0x0000, 0x0000, 0x0000,
6289 0x01A6, 0x0241, 0x0000, 0x0000, 0x1E1E, 0x1E46, 0x1E6E, 0x0000, 0x1EB4,
6290 0x1EDC, 0x0000, 0x0000, 0x1F49, 0x0000, 0x1FEB, 0x1F9F, 0x0000, 0x0000,
6291 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0420, 0x0404, 0x0470,
6292 0x049E, 0x04C5, 0x04EC, 0x050E, 0x0540, 0x0554, 0x0000, 0x0000, 0x0000,
6293 0x0000, 0x0000, 0x0000, 0x0000, 0xFF37, 0x0000, 0x0000, 0x0000, 0x0000,
6294 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6295 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6296 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6297 0x0000, 0x0000, 0x01D7, 0x0200, 0x0228, 0x0000, 0x018F, 0x0000, 0x0000,
6298 0x0000, 0x0000, 0x0000, 0x1E20, 0x1E48, 0x1E70, 0x0000, 0x1EB6, 0x1EDE,
6299 0x0000, 0x0000, 0x1F4A, 0x1F68, 0x1FFA, 0x1FA8, 0x0000, 0x0000, 0x0000,
6300 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0421, 0x0405, 0x0472, 0x04A0,
6301 0x04C7, 0x04EE, 0x0000, 0x0541, 0x0555, 0x0000, 0x0000, 0x0000, 0x0000,
6302 0x0000, 0x0000, 0x0000, 0xFF38, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6303 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6304 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6305 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6306 0x0000, 0x01D9, 0x0202, 0x022A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6307 0x0000, 0x0000, 0x1E22, 0x1E4A, 0x1E72, 0x0000, 0x1EB8, 0x1EE0, 0x0000,
6308 0x0000, 0x1F4B, 0x1F69, 0x1FFB, 0x1FA9, 0x0000, 0x0000, 0x0000, 0x0000,
6309 0x0000, 0x0000, 0x0000, 0x0000, 0x0422, 0x0406, 0x0474, 0x04A2, 0x04C9,
6310 0x04F0, 0x0000, 0x0542, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6311 0x0000, 0x0000, 0xFF39, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6312 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6313 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6314 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01AC,
6315 0x01DB, 0x0204, 0x022C, 0x0000, 0x0190, 0x019C, 0x01A9, 0x0000, 0x0000,
6316 0x0000, 0x1E24, 0x1E4C, 0x1E74, 0x0000, 0x1EBA, 0x1EE2, 0x0000, 0x1F28,
6317 0x1F4C, 0x1F6A, 0x0000, 0x1FAA, 0x1FD8, 0x1FFC, 0x0000, 0x0000, 0x0000,
6318 0x0000, 0x0000, 0x0000, 0x0423, 0x0407, 0x0476, 0x04A4, 0x04CB, 0x04F2,
6319 0x0000, 0x0543, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6320 0x0000, 0xFF3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6321 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6322 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6323 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01AF, 0x018E,
6324 0x0206, 0x022E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6325 0x1E26, 0x1E4E, 0x1E76, 0x0000, 0x1EBC, 0x1EE4, 0x0000, 0x1F29, 0x1F4D,
6326 0x1F6B, 0x0000, 0x1FAB, 0x1FD9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6327 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6328 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6329 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6330 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6331 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6332 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6333 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6334 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6335 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6336 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6337 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6338 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6339 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6340 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6341 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6342 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6343 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6344 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6345 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6346 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6347 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6348 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6349 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6350 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6351 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6352 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6353 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6354 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6355 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6356 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6357 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6358 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6359 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6360 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6361 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6362 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6363 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6364 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6365 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6366 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6367 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6368 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6369 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6370 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6371 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6372 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6373 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6374 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6375 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6376 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6377 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6378 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6379 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6380 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6381 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6382 0x0000, 0x0000, 0x0000, 0xFF41, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6383 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6384 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6385 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6386 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6387 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6388 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6389 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6390 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6391 0x0000, 0x0000, 0xFF42, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6392 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6393 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6394 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6395 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6396 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6397 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6398 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6399 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6400 0x0000, 0xFF43, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6401 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6402 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6403 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6404 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6405 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6406 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6407 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6408 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6409 0xFF44, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6410 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6411 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6412 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6413 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6414 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6415 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6416 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6417 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF45,
6418 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6419 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6420 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6421 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6422 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6423 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6424 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6425 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6426 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF46, 0x0000,
6427 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6428 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6429 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6430 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6431 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6432 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6433 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0430,
6434 0x0444, 0x0458, 0x0479, 0x04A7, 0x04CE, 0x04F5, 0x0000, 0x0574, 0x2170,
6435 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF47, 0x0000, 0x0000,
6436 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6437 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6438 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6439 0x0000, 0x0000, 0x0000, 0x0180, 0x01B4, 0x01DF, 0x0209, 0x0231, 0x0000,
6440 0x025D, 0x0271, 0x0285, 0x0299, 0x02AD, 0x1E01, 0x1E29, 0x1E51, 0x1E79,
6441 0x1E9B, 0x1EBF, 0x1EE7, 0x1F00, 0x1F22, 0x0000, 0x1F64, 0x1F80, 0x1FA4,
6442 0x1FD2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0431, 0x0445,
6443 0x0459, 0x047B, 0x04A9, 0x0000, 0x04F7, 0x0561, 0x0575, 0x2171, 0x0000,
6444 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF48, 0x0000, 0x0000, 0x0000,
6445 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6446 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6447 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6448 0x0000, 0x0000, 0x0183, 0x01B6, 0x01E1, 0x020B, 0x0233, 0x0000, 0x025E,
6449 0x0272, 0x0286, 0x029A, 0x02AE, 0x1E03, 0x1E2B, 0x1E53, 0x1E7B, 0x0000,
6450 0x1EC1, 0x1EE9, 0x1F01, 0x1F23, 0x0000, 0x1F65, 0x1F81, 0x1FA5, 0x1FD3,
6451 0x1FF6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0432, 0x0446, 0x045A,
6452 0x047D, 0x04AB, 0x04D1, 0x04F9, 0x0562, 0x0576, 0x2172, 0x0000, 0x0000,
6453 0x0000, 0x0000, 0x0000, 0x0000, 0xFF49, 0x0000, 0x0000, 0x0000, 0x0000,
6454 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6455 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6456 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6457 0x0000, 0x0185, 0x01B9, 0x01E3, 0x020D, 0x0234, 0x0000, 0x025F, 0x0273,
6458 0x0287, 0x029B, 0x02AF, 0x1E05, 0x1E2D, 0x1E55, 0x1E7D, 0x0000, 0x1EC3,
6459 0x1EEB, 0x1F02, 0x1F24, 0x0000, 0x1F66, 0x1F82, 0x1FA6, 0x0000, 0x1FF7,
6460 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0433, 0x0447, 0x045B, 0x047F,
6461 0x04AD, 0x04D3, 0x0000, 0x0563, 0x0577, 0x2173, 0x0000, 0x0000, 0x0000,
6462 0x0000, 0x0000, 0x0000, 0xFF4A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6463 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6464 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6465 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6466 0x0188, 0x01BA, 0x01E5, 0x020F, 0x0235, 0x0000, 0x0260, 0x0274, 0x0288,
6467 0x029C, 0x0000, 0x1E07, 0x1E2F, 0x1E57, 0x1E7F, 0x0000, 0x1EC5, 0x1EED,
6468 0x1F03, 0x1F25, 0x0000, 0x1F67, 0x1F83, 0x1FA7, 0x0000, 0x0000, 0x0000,
6469 0x0000, 0x0000, 0x0000, 0x0000, 0x0434, 0x0448, 0x045C, 0x0481, 0x04AF,
6470 0x04D5, 0x0000, 0x0564, 0x0578, 0x2174, 0x0000, 0x0000, 0x0000, 0x0000,
6471 0x0000, 0x0000, 0xFF4B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6472 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6473 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6474 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018C,
6475 0x01BB, 0x01E7, 0x0211, 0x0236, 0x0000, 0x0261, 0x0275, 0x0289, 0x029D,
6476 0x0000, 0x1E09, 0x1E31, 0x1E59, 0x1E81, 0x0000, 0x1EC7, 0x1EEF, 0x1F04,
6477 0x1F26, 0x1F50, 0x1F70, 0x1F84, 0x1FB0, 0x1FD6, 0x0000, 0x0000, 0x0000,
6478 0x0000, 0x0000, 0x0000, 0x0435, 0x0449, 0x045D, 0x0000, 0x04B1, 0x04D7,
6479 0x0000, 0x0565, 0x0579, 0x2175, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6480 0x0000, 0xFF4C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6481 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6482 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6483 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x018D, 0x0000,
6484 0x01E9, 0x0213, 0x0237, 0x0000, 0x0262, 0x0276, 0x028A, 0x029E, 0x0000,
6485 0x1E0B, 0x1E33, 0x1E5B, 0x1E83, 0x1EA1, 0x1EC9, 0x1EF1, 0x1F05, 0x1F27,
6486 0x1F51, 0x1F71, 0x1F85, 0x1FB1, 0x1FD7, 0x0000, 0x0000, 0x0000, 0x0000,
6487 0x0000, 0x0000, 0x0436, 0x044A, 0x045E, 0x048B, 0x04B3, 0x04D9, 0x0000,
6488 0x0566, 0x057A, 0x2176, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6489 0xFF4D, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6490 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6491 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6492 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x01BE, 0x01EB,
6493 0x0215, 0x0238, 0x0000, 0x0263, 0x0277, 0x028B, 0x029F, 0x0000, 0x1E0D,
6494 0x1E35, 0x1E5D, 0x1E85, 0x1EA3, 0x1ECB, 0x1EF3, 0x1F06, 0x1F30, 0x1F52,
6495 0x1F72, 0x1F86, 0x1FB2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6496 0x0000, 0x0437, 0x044B, 0x045F, 0x048D, 0x04B5, 0x04DB, 0x0000, 0x0567,
6497 0x057B, 0x2177, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF4E,
6498 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6499 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6500 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6501 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0195, 0x01BD, 0x01ED, 0x0217,
6502 0x0239, 0x0250, 0x0264, 0x0278, 0x028C, 0x02A0, 0x0000, 0x1E0F, 0x1E37,
6503 0x1E5F, 0x1E87, 0x1EA5, 0x1ECD, 0x1EF5, 0x1F07, 0x1F31, 0x1F53, 0x1F73,
6504 0x1F87, 0x1FB3, 0x1FE0, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6505 0x0438, 0x044C, 0x0461, 0x048F, 0x04B7, 0x04DD, 0x0000, 0x0568, 0x057C,
6506 0x2178, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF4F, 0x0000,
6507 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6508 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6509 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6510 0x0000, 0x0000, 0x0000, 0x0000, 0x0199, 0x01C6, 0x01EF, 0x0219, 0x0000,
6511 0x0251, 0x0265, 0x0279, 0x028D, 0x02A1, 0x0000, 0x1E11, 0x1E39, 0x1E61,
6512 0x1E89, 0x1EA7, 0x1ECF, 0x1EF7, 0x1F10, 0x1F32, 0x1F54, 0x1F74, 0x1F90,
6513 0x1FB4, 0x1FE1, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0439,
6514 0x044D, 0x0463, 0x0491, 0x04B9, 0x04DF, 0x0501, 0x0569, 0x057D, 0x2179,
6515 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF50, 0x0000, 0x0000,
6516 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6517 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6518 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6519 0x0000, 0x0000, 0x0000, 0x019A, 0x01C9, 0x01F0, 0x021B, 0x023C, 0x0252,
6520 0x0266, 0x027A, 0x028E, 0x02A2, 0x0000, 0x1E13, 0x1E3B, 0x1E63, 0x1E8B,
6521 0x1EA9, 0x1ED1, 0x1EF9, 0x1F11, 0x1F33, 0x1F55, 0x1F75, 0x1F91, 0x0000,
6522 0x1FE2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x043A, 0x044E,
6523 0x0465, 0x0493, 0x04BB, 0x04E1, 0x0503, 0x056A, 0x057E, 0x217A, 0x0000,
6524 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF51, 0x0000, 0x0000, 0x0000,
6525 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6526 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6527 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6528 0x0000, 0x0000, 0x019B, 0x01CC, 0x01F3, 0x021D, 0x0000, 0x0253, 0x0267,
6529 0x027B, 0x028F, 0x02A3, 0x0000, 0x1E15, 0x1E3D, 0x1E65, 0x1E8D, 0x1EAB,
6530 0x1ED3, 0x0000, 0x1F12, 0x1F34, 0x1F56, 0x1F76, 0x1F92, 0x1FB6, 0x1FE3,
6531 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x043B, 0x044F, 0x0467,
6532 0x0495, 0x04BD, 0x04E3, 0x0505, 0x056B, 0x057F, 0x217B, 0x0000, 0x0000,
6533 0x0000, 0x0000, 0x0000, 0x0000, 0xFF52, 0x0000, 0x0000, 0x0000, 0x0000,
6534 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6535 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6536 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6537 0x0000, 0x019E, 0x01CE, 0x01F5, 0x021F, 0x023F, 0x0254, 0x0268, 0x027C,
6538 0x0290, 0x02A4, 0x0000, 0x1E17, 0x1E3F, 0x1E67, 0x1E8F, 0x1EAD, 0x1ED5,
6539 0x0000, 0x1F13, 0x1F35, 0x1F57, 0x1F77, 0x1F93, 0x1FB7, 0x1FE4, 0x0000,
6540 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x043C, 0x0450, 0x0469, 0x0497,
6541 0x04BF, 0x04E5, 0x0507, 0x056C, 0x0580, 0x217C, 0x0000, 0x0000, 0x0000,
6542 0x0000, 0x0000, 0x0000, 0xFF53, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6543 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6544 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6545 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6546 0x01A1, 0x01D0, 0x01F9, 0x0221, 0x0240, 0x0255, 0x0269, 0x027D, 0x0291,
6547 0x02A5, 0x0000, 0x1E19, 0x1E41, 0x1E69, 0x1E91, 0x1EAF, 0x1ED7, 0x0000,
6548 0x1F14, 0x1F36, 0x0000, 0x1F78, 0x1F94, 0x1FC2, 0x1FE5, 0x0000, 0x0000,
6549 0x0000, 0x0000, 0x0000, 0x0000, 0x043D, 0x0451, 0x046B, 0x0499, 0x0000,
6550 0x04E7, 0x0509, 0x056D, 0x0581, 0x217D, 0x0000, 0x0000, 0x0000, 0x0000,
6551 0x0000, 0x0000, 0xFF54, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6552 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6553 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6554 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A3,
6555 0x01D2, 0x01FB, 0x0223, 0x0000, 0x0256, 0x026A, 0x027E, 0x0292, 0x02A6,
6556 0x0000, 0x1E1B, 0x1E43, 0x1E6B, 0x1E93, 0x1EB1, 0x1ED9, 0x0000, 0x1F15,
6557 0x1F37, 0x0000, 0x1F79, 0x1F95, 0x1FC3, 0x1FE6, 0x0000, 0x0000, 0x0000,
6558 0x0000, 0x0000, 0x0000, 0x043E, 0x0452, 0x046D, 0x049B, 0x04C2, 0x04E9,
6559 0x050B, 0x056E, 0x0582, 0x217E, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6560 0x0000, 0xFF55, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6561 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6562 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6563 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A5, 0x01D4,
6564 0x01FD, 0x0225, 0x0000, 0x0257, 0x026B, 0x027F, 0x0293, 0x02A7, 0x0000,
6565 0x1E1D, 0x1E45, 0x1E6D, 0x1E95, 0x1EB3, 0x1EDB, 0x0000, 0x0000, 0x1F40,
6566 0x0000, 0x1F7A, 0x1F96, 0x1FC4, 0x1FE7, 0x0000, 0x0000, 0x0000, 0x0000,
6567 0x0000, 0x0000, 0x043F, 0x0453, 0x046F, 0x049D, 0x04C4, 0x04EB, 0x050D,
6568 0x056F, 0x0583, 0x217F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6569 0xFF56, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6570 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6571 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6572 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01A8, 0x01D6, 0x01FF,
6573 0x0227, 0x0000, 0x0258, 0x026C, 0x0280, 0x0294, 0x02A8, 0x0000, 0x1E1F,
6574 0x1E47, 0x1E6F, 0x1E96, 0x1EB5, 0x1EDD, 0x0000, 0x0000, 0x1F41, 0x0000,
6575 0x1F7B, 0x1F97, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6576 0x0000, 0x0440, 0x0454, 0x0471, 0x049F, 0x04C6, 0x04ED, 0x050F, 0x0570,
6577 0x0584, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF57,
6578 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6579 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6580 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6581 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01AA, 0x01D8, 0x0201, 0x0229,
6582 0x0000, 0x0259, 0x026D, 0x0281, 0x0295, 0x02A9, 0x0000, 0x1E21, 0x1E49,
6583 0x1E71, 0x1E97, 0x1EB7, 0x1EDF, 0x0000, 0x0000, 0x1F42, 0x1F60, 0x1F7C,
6584 0x1FA0, 0x1FC6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6585 0x0441, 0x0455, 0x0473, 0x04A1, 0x04C8, 0x04EF, 0x0000, 0x0571, 0x0585,
6586 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF58, 0x0000,
6587 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6588 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6589 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6590 0x0000, 0x0000, 0x0000, 0x0000, 0x01AB, 0x01DA, 0x0203, 0x022B, 0x0000,
6591 0x025A, 0x026E, 0x0282, 0x0296, 0x02AA, 0x0000, 0x1E23, 0x1E4B, 0x1E73,
6592 0x1E98, 0x1EB9, 0x1EE1, 0x0000, 0x0000, 0x1F43, 0x1F61, 0x1F7D, 0x1FA1,
6593 0x1FC7, 0x1FF2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0442,
6594 0x0456, 0x0475, 0x04A3, 0x04CA, 0x04F1, 0x0000, 0x0572, 0x0000, 0x0000,
6595 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF59, 0x0000, 0x0000,
6596 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6597 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6598 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6599 0x0000, 0x0000, 0x0000, 0x01AD, 0x01DC, 0x0205, 0x022D, 0x0000, 0x025B,
6600 0x026F, 0x0283, 0x0297, 0x02AB, 0x0000, 0x1E25, 0x1E4D, 0x1E75, 0x1E99,
6601 0x1EBB, 0x1EE3, 0x0000, 0x1F20, 0x1F44, 0x1F62, 0x0000, 0x1FA2, 0x1FD0,
6602 0x1FF3, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0443, 0x0457,
6603 0x0477, 0x04A5, 0x04CC, 0x04F3, 0x0000, 0x0573, 0x0000, 0x0000, 0x0000,
6604 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF5A, 0x0000, 0x0000, 0x0000,
6605 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6606 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6607 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6608 0x0000, 0x0000, 0x01B0, 0x01DD, 0x0207, 0x022F, 0x0000, 0x025C, 0x0270,
6609 0x0284, 0x0298, 0x02AC, 0x0000, 0x1E27, 0x1E4F, 0x1E77, 0x1E9A, 0x1EBD,
6610 0x1EE5, 0x0000, 0x1F21, 0x1F45, 0x1F63, 0x0000, 0x1FA3, 0x1FD1, 0x1FF4};
6611
6612 /* 00C0-05FF */
6613 static const uint16 uni_0C00_05FF[1344] = {
6614 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F,
6615 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028,
6616 0x0029, 0x002A, 0x0067, 0x0068, 0x0069, 0x0000, 0x006B, 0x006C, 0x006D,
6617 0x006E, 0x006F, 0x0070, 0x0071, 0x008A, 0x0037, 0x0038, 0x0039, 0x003A,
6618 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, 0x0040, 0x0041, 0x0042, 0x0043,
6619 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x0087, 0x0088,
6620 0x0089, 0x0000, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091,
6621 0x0092, 0x0073, 0x0093, 0x0074, 0x0094, 0x0075, 0x0095, 0x0076, 0x0096,
6622 0x0077, 0x0097, 0x0078, 0x0098, 0x0079, 0x0099, 0x007A, 0x009A, 0x00B7,
6623 0x00D7, 0x00B8, 0x00D8, 0x00B9, 0x00D9, 0x00BA, 0x00DA, 0x00BB, 0x00DB,
6624 0x00BC, 0x00DC, 0x00BD, 0x00DD, 0x00BE, 0x00DE, 0x00BF, 0x00DF, 0x00C0,
6625 0x00E0, 0x00C1, 0x00E1, 0x00C2, 0x00E2, 0x00C3, 0x00E3, 0x00C4, 0x00E4,
6626 0x00C5, 0x00E5, 0x00C6, 0x00E6, 0x0000, 0x00E7, 0x00C8, 0x00E8, 0x00C9,
6627 0x00E9, 0x00CA, 0x00EA, 0x0127, 0x0108, 0x0128, 0x0109, 0x0129, 0x010A,
6628 0x012A, 0x010B, 0x012B, 0x010C, 0x012C, 0x010D, 0x012D, 0x010E, 0x012E,
6629 0x010F, 0x012F, 0x0130, 0x0111, 0x0131, 0x0112, 0x0132, 0x0113, 0x0133,
6630 0x0114, 0x0134, 0x0115, 0x0135, 0x0116, 0x0136, 0x0117, 0x0137, 0x0118,
6631 0x0138, 0x0119, 0x0139, 0x011A, 0x013A, 0x0157, 0x0177, 0x0158, 0x0178,
6632 0x0159, 0x0179, 0x015A, 0x017A, 0x015B, 0x017B, 0x015C, 0x017C, 0x015D,
6633 0x017D, 0x015E, 0x017E, 0x015F, 0x017F, 0x0160, 0x0180, 0x0161, 0x0181,
6634 0x0162, 0x0182, 0x0163, 0x0183, 0x0072, 0x0164, 0x0184, 0x0165, 0x0185,
6635 0x0166, 0x0186, 0x0187, 0x1161, 0x0A86, 0x07B1, 0x11B1, 0x0801, 0x1201,
6636 0x0AD6, 0x0851, 0x1251, 0x0B76, 0x0BC6, 0x08A1, 0x12A1, 0x12F1, 0x0D52,
6637 0x0C66, 0x0D06, 0x0941, 0x1341, 0x0857, 0x0947, 0x1391, 0x0B27, 0x0AD7,
6638 0x09E1, 0x13E1, 0x1431, 0x1481, 0x0D07, 0x07B8, 0x14D1, 0x08A8, 0x0B21,
6639 0x1521, 0x0B71, 0x1571, 0x0BC1, 0x15C1, 0x0C18, 0x0C11, 0x1611, 0x0D08,
6640 0x1661, 0x16B1, 0x0D01, 0x1701, 0x0859, 0x0D51, 0x1751, 0x08F9, 0x0949,
6641 0x0762, 0x1162, 0x07B2, 0x11B2, 0x0B79, 0x0802, 0x1202, 0x1252, 0x12A2,
6642 0x0992, 0x1392, 0x1342, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x09E2,
6643 0x0000, 0x13E2, 0x0A32, 0x0000, 0x1432, 0x0A82, 0x0000, 0x1482, 0x0AD2,
6644 0x14D2, 0x0B22, 0x1522, 0x0B72, 0x1572, 0x0BC2, 0x15C2, 0x0C12, 0x1612,
6645 0x0C62, 0x1662, 0x0CB2, 0x16B2, 0x0D02, 0x1702, 0x1752, 0x0763, 0x1163,
6646 0x07B3, 0x11B3, 0x0803, 0x1203, 0x0853, 0x1253, 0x08A3, 0x12A3, 0x08F3,
6647 0x12F3, 0x0943, 0x1343, 0x0993, 0x1393, 0x09E3, 0x13E3, 0x1433, 0x0A83,
6648 0x0000, 0x1483, 0x0AD3, 0x14D3, 0x0991, 0x0000, 0x0B23, 0x1523, 0x0B73,
6649 0x1573, 0x0BC3, 0x15C3, 0x0C13, 0x1613, 0x0C63, 0x1663, 0x0CB3, 0x16B3,
6650 0x0D03, 0x1703, 0x0D53, 0x1753, 0x0764, 0x1164, 0x07B4, 0x11B4, 0x0804,
6651 0x1204, 0x0854, 0x1254, 0x08A4, 0x12A4, 0x08F4, 0x12F4, 0x0944, 0x1344,
6652 0x0994, 0x1394, 0x09E4, 0x13E4, 0x0A34, 0x1434, 0x0A84, 0x1484, 0x0AD4,
6653 0x14D4, 0x0AD1, 0x1524, 0x0B74, 0x1574, 0x0BC4, 0x15C4, 0x0C14, 0x1614,
6654 0x0C64, 0x1664, 0x0CB4, 0x16B4, 0x0D04, 0x1704, 0x0D54, 0x1754, 0x0765,
6655 0x1165, 0x07B5, 0x11B5, 0x1205, 0x1255, 0x12A5, 0x12F5, 0x1345, 0x1395,
6656 0x09E5, 0x0A35, 0x1435, 0x0A31, 0x0A85, 0x14D5, 0x1525, 0x0C19, 0x0000,
6657 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6658 0x0000, 0x0000, 0x0000, 0x0000, 0x1396, 0x13E6, 0x1436, 0x1486, 0x14D6,
6659 0x1526, 0x1576, 0x15C6, 0x1616, 0x1666, 0x16B6, 0x1706, 0x1756, 0x1167,
6660 0x11B7, 0x1207, 0x1257, 0x12A7, 0x12F7, 0x1347, 0x1397, 0x13E7, 0x1437,
6661 0x1487, 0x14D7, 0x1527, 0x1577, 0x15C7, 0x1617, 0x1667, 0x16B7, 0x1707,
6662 0x1757, 0x1168, 0x11B8, 0x1208, 0x1258, 0x12A8, 0x12F8, 0x1348, 0x1398,
6663 0x13E8, 0x1438, 0x1488, 0x14D8, 0x1528, 0x1578, 0x15C8, 0x1618, 0x1668,
6664 0x16B8, 0x1708, 0x1758, 0x1169, 0x11B9, 0x1209, 0x1259, 0x12A9, 0x12F9,
6665 0x1349, 0x1399, 0x13E9, 0x1439, 0x1489, 0x14D9, 0x1529, 0x1579, 0x15C9,
6666 0x1619, 0x1669, 0x16B9, 0x1709, 0x1759, 0x116A, 0x11BA, 0x120A, 0x125A,
6667 0x12AA, 0x12FA, 0x134A, 0x139A, 0x13EA, 0x143A, 0x148A, 0x14DA, 0x152A,
6668 0x157A, 0x15CA, 0x161A, 0x166A, 0x16BA, 0x170A, 0x175A, 0x116B, 0x11BB,
6669 0x120B, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6670 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6671 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6672 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6673 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6674 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6675 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6676 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6677 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6678 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6679 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6680 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6681 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6682 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6683 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6684 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6685 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6686 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6687 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6688 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6689 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6690 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6691 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6692 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x01F7,
6693 0x0000, 0x01F8, 0x01F9, 0x01FA, 0x0000, 0x0253, 0x0000, 0x0254, 0x0255,
6694 0x01D9, 0x01FC, 0x0257, 0x01FE, 0x01FF, 0x0200, 0x0201, 0x0202, 0x0258,
6695 0x0204, 0x02A7, 0x0206, 0x0207, 0x0208, 0x0209, 0x020A, 0x0299, 0x0248,
6696 0x0000, 0x02A9, 0x024B, 0x024C, 0x0298, 0x024E, 0x024F, 0x0250, 0x0251,
6697 0x0252, 0x0217, 0x0218, 0x0219, 0x021A, 0x021B, 0x021C, 0x021D, 0x021E,
6698 0x021F, 0x0220, 0x0221, 0x0222, 0x0223, 0x0224, 0x0225, 0x0226, 0x0227,
6699 0x0228, 0x0229, 0x022A, 0x0267, 0x0268, 0x0269, 0x026A, 0x026B, 0x026C,
6700 0x026D, 0x026E, 0x026F, 0x0270, 0x0271, 0x0272, 0x0273, 0x0274, 0x0275,
6701 0x0000, 0x0277, 0x0278, 0x0259, 0x025A, 0x0297, 0x02B8, 0x02B9, 0x02BA,
6702 0x0000, 0x02BB, 0x029C, 0x02BC, 0x029D, 0x02BD, 0x029E, 0x02BE, 0x029F,
6703 0x02BF, 0x02A0, 0x02C0, 0x02A1, 0x02C1, 0x02A2, 0x02C2, 0x02A3, 0x02C3,
6704 0x02A4, 0x02C4, 0x02A5, 0x02C5, 0x02A6, 0x02C6, 0x02C7, 0x02C8, 0x02C9,
6705 0x02CA, 0x0000, 0x0307, 0x0308, 0x0000, 0x0309, 0x0000, 0x0000, 0x030A,
6706 0x030B, 0x02EC, 0x02ED, 0x02EE, 0x0AF1, 0x0B41, 0x0B91, 0x0BE1, 0x0C31,
6707 0x0C81, 0x0CD1, 0x0D21, 0x0732, 0x0782, 0x07D2, 0x0822, 0x0872, 0x08C2,
6708 0x0912, 0x0962, 0x0730, 0x0780, 0x07D0, 0x0820, 0x0870, 0x08C0, 0x0910,
6709 0x0960, 0x09B0, 0x0A00, 0x0A50, 0x0AA0, 0x0AF0, 0x0B40, 0x0B90, 0x0BE0,
6710 0x0C30, 0x0C80, 0x0CD0, 0x0D20, 0x0731, 0x0781, 0x07D1, 0x0821, 0x0871,
6711 0x08C1, 0x0911, 0x0961, 0x09B1, 0x0A01, 0x0A51, 0x0AA1, 0x1130, 0x1180,
6712 0x11D0, 0x1220, 0x1270, 0x12C0, 0x1310, 0x1360, 0x13B0, 0x1400, 0x1450,
6713 0x14A0, 0x14F0, 0x1540, 0x1590, 0x15E0, 0x1630, 0x1680, 0x16D0, 0x1720,
6714 0x1131, 0x1181, 0x11D1, 0x1221, 0x1271, 0x12C1, 0x1311, 0x1361, 0x13B1,
6715 0x1401, 0x1451, 0x14A1, 0x14F1, 0x1541, 0x1591, 0x15E1, 0x1631, 0x1681,
6716 0x16D1, 0x1721, 0x1132, 0x1182, 0x11D2, 0x1222, 0x1272, 0x12C2, 0x1312,
6717 0x1362, 0x09B2, 0x13B2, 0x0A02, 0x1402, 0x0A52, 0x1452, 0x0AA2, 0x14A2,
6718 0x0AF2, 0x14F2, 0x0B42, 0x1542, 0x0B92, 0x1592, 0x0BE2, 0x15E2, 0x0C32,
6719 0x1632, 0x0C82, 0x1682, 0x0CD2, 0x16D2, 0x0D22, 0x1722, 0x0733, 0x1133,
6720 0x0783, 0x1183, 0x07D3, 0x11D3, 0x0823, 0x1223, 0x0873, 0x1273, 0x0000,
6721 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0913, 0x1313,
6722 0x0963, 0x1363, 0x09B3, 0x13B3, 0x0A03, 0x1403, 0x0A53, 0x1453, 0x0AA3,
6723 0x14A3, 0x0AF3, 0x14F3, 0x0B43, 0x1543, 0x0B93, 0x1593, 0x0BE3, 0x15E3,
6724 0x0C33, 0x1633, 0x0C83, 0x1683, 0x0CD3, 0x16D3, 0x0D23, 0x1723, 0x0734,
6725 0x1134, 0x0784, 0x1184, 0x07D4, 0x11D4, 0x0824, 0x1224, 0x0874, 0x1274,
6726 0x08C4, 0x12C4, 0x0914, 0x1314, 0x0964, 0x1364, 0x09B4, 0x13B4, 0x0A04,
6727 0x1404, 0x0A54, 0x1454, 0x0AA4, 0x14A4, 0x0AF4, 0x14F4, 0x0B44, 0x0B94,
6728 0x1594, 0x0BE4, 0x15E4, 0x0C34, 0x1634, 0x0C84, 0x1684, 0x0CD4, 0x16D4,
6729 0x0D24, 0x1724, 0x0735, 0x1135, 0x0000, 0x07D5, 0x11D5, 0x0825, 0x1225,
6730 0x0875, 0x1275, 0x08C5, 0x12C5, 0x0915, 0x1315, 0x0965, 0x1365, 0x09B5,
6731 0x13B5, 0x0A05, 0x1405, 0x0A55, 0x1455, 0x0AA5, 0x14A5, 0x0AF5, 0x14F5,
6732 0x0B45, 0x1545, 0x0B95, 0x1595, 0x0BE5, 0x15E5, 0x0C35, 0x1635, 0x0C85,
6733 0x1685, 0x0CD5, 0x16D5, 0x0D25, 0x1725, 0x0736, 0x1136, 0x0786, 0x1186,
6734 0x07D6, 0x11D6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0A06,
6735 0x1406, 0x0A56, 0x1456, 0x0AA6, 0x14A6, 0x0AF6, 0x14F6, 0x0B46, 0x1546,
6736 0x0B96, 0x1596, 0x0BE6, 0x15E6, 0x0C36, 0x1636, 0x0000, 0x0000, 0x0000,
6737 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6738 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6739 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6740 0x0000, 0x0000, 0x0000, 0x0787, 0x07D7, 0x0827, 0x0877, 0x08C7, 0x0917,
6741 0x0967, 0x09B7, 0x0A07, 0x0A57, 0x0AA7, 0x0AF7, 0x0B47, 0x0B97, 0x0BE7,
6742 0x0C37, 0x0C87, 0x0CD7, 0x0D27, 0x0738, 0x0788, 0x07D8, 0x0828, 0x0878,
6743 0x08C8, 0x0918, 0x0968, 0x09B8, 0x0A08, 0x0A58, 0x0AA8, 0x0AF8, 0x0B48,
6744 0x0B98, 0x0BE8, 0x0C38, 0x0C88, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6745 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x1187, 0x11D7, 0x1227,
6746 0x1277, 0x12C7, 0x1317, 0x1367, 0x13B7, 0x1407, 0x1457, 0x14A7, 0x14F7,
6747 0x1547, 0x1597, 0x15E7, 0x1637, 0x1687, 0x16D7, 0x1727, 0x1138, 0x1188,
6748 0x11D8, 0x1228, 0x1278, 0x12C8, 0x1318, 0x1368, 0x13B8, 0x1408, 0x1458,
6749 0x14A8, 0x14F8, 0x1548, 0x1598, 0x15E8, 0x1638, 0x1688, 0x0000, 0x0000,
6750 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6751 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6752 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6753 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6754 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6755 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6756 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6757 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6758 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6759 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6760 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6761 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6762 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6763 0x0000, 0x0000, 0x0000};
6764
6765 /* 1E00-1FFF */
6766 static const uint16 uni_1E00_1FFF[512] = {
6767 0x076C, 0x116C, 0x07BC, 0x11BC, 0x080C, 0x120C, 0x085C, 0x125C, 0x08AC,
6768 0x12AC, 0x08FC, 0x12FC, 0x094C, 0x134C, 0x099C, 0x139C, 0x09EC, 0x13EC,
6769 0x0A3C, 0x143C, 0x0A8C, 0x148C, 0x0ADC, 0x14DC, 0x0B2C, 0x152C, 0x0B7C,
6770 0x157C, 0x0BCC, 0x15CC, 0x0C1C, 0x161C, 0x0C6C, 0x166C, 0x0CBC, 0x16BC,
6771 0x0D0C, 0x170C, 0x0D5C, 0x175C, 0x076D, 0x116D, 0x07BD, 0x11BD, 0x080D,
6772 0x120D, 0x085D, 0x125D, 0x08AD, 0x12AD, 0x08FD, 0x12FD, 0x094D, 0x134D,
6773 0x099D, 0x139D, 0x09ED, 0x13ED, 0x0A3D, 0x143D, 0x0A8D, 0x148D, 0x0ADD,
6774 0x14DD, 0x0B2D, 0x152D, 0x0B7D, 0x157D, 0x0BCD, 0x15CD, 0x0C1D, 0x161D,
6775 0x0C6D, 0x166D, 0x0CBD, 0x16BD, 0x0D0D, 0x170D, 0x0D5D, 0x175D, 0x076E,
6776 0x116E, 0x07BE, 0x11BE, 0x080E, 0x120E, 0x085E, 0x125E, 0x08AE, 0x12AE,
6777 0x08FE, 0x12FE, 0x094E, 0x134E, 0x099E, 0x139E, 0x0770, 0x13EE, 0x0A3E,
6778 0x143E, 0x0A8E, 0x148E, 0x0ADE, 0x14DE, 0x0B2E, 0x152E, 0x0B7E, 0x157E,
6779 0x0BCE, 0x15CE, 0x0C1E, 0x161E, 0x0C6E, 0x166E, 0x0CBE, 0x16BE, 0x0D0E,
6780 0x170E, 0x0D5E, 0x175E, 0x076F, 0x116F, 0x07BF, 0x11BF, 0x080F, 0x120F,
6781 0x085F, 0x125F, 0x08AF, 0x12AF, 0x08FF, 0x12FF, 0x094F, 0x134F, 0x099F,
6782 0x139F, 0x09EF, 0x13EF, 0x0A3F, 0x143F, 0x0A8F, 0x148F, 0x0ADF, 0x14DF,
6783 0x0B2F, 0x152F, 0x0B7F, 0x157F, 0x0BCF, 0x15CF, 0x161F, 0x166F, 0x16BF,
6784 0x170F, 0x175F, 0x1170, 0x0000, 0x0000, 0x0000, 0x0000, 0x0900, 0x1300,
6785 0x0950, 0x1350, 0x09A0, 0x13A0, 0x09F0, 0x13F0, 0x0A40, 0x1440, 0x0A90,
6786 0x1490, 0x0AE0, 0x14E0, 0x0B30, 0x1530, 0x0B80, 0x1580, 0x0BD0, 0x15D0,
6787 0x0C20, 0x1620, 0x0C70, 0x1670, 0x0CC0, 0x16C0, 0x0D10, 0x1710, 0x0D60,
6788 0x1760, 0x0771, 0x1171, 0x07C1, 0x11C1, 0x0811, 0x1211, 0x0861, 0x1261,
6789 0x08B1, 0x12B1, 0x0901, 0x1301, 0x0951, 0x1351, 0x09A1, 0x13A1, 0x09F1,
6790 0x13F1, 0x0A41, 0x1441, 0x0A91, 0x1491, 0x0AE1, 0x14E1, 0x0B31, 0x1531,
6791 0x0B81, 0x1581, 0x0BD1, 0x15D1, 0x0C21, 0x1621, 0x0C71, 0x1671, 0x0CC1,
6792 0x16C1, 0x0D11, 0x1711, 0x0D61, 0x1761, 0x0772, 0x1172, 0x07C2, 0x11C2,
6793 0x0812, 0x1212, 0x0862, 0x1262, 0x08B2, 0x12B2, 0x0902, 0x1302, 0x0952,
6794 0x1352, 0x09A2, 0x13A2, 0x09F2, 0x13F2, 0x0A42, 0x1442, 0x0000, 0x0000,
6795 0x0000, 0x0000, 0x0000, 0x0000, 0x1173, 0x11C3, 0x1213, 0x1263, 0x12B3,
6796 0x1303, 0x1353, 0x13A3, 0x0773, 0x07C3, 0x0813, 0x0863, 0x08B3, 0x0903,
6797 0x0953, 0x09A3, 0x13F3, 0x1443, 0x1493, 0x14E3, 0x1533, 0x1583, 0x0000,
6798 0x0000, 0x09F3, 0x0A43, 0x0A93, 0x0AE3, 0x0B33, 0x0B83, 0x0000, 0x0000,
6799 0x1713, 0x1763, 0x1174, 0x11C4, 0x1214, 0x1264, 0x12B4, 0x1304, 0x0D13,
6800 0x0D63, 0x0774, 0x07C4, 0x0814, 0x0864, 0x08B4, 0x0904, 0x1354, 0x13A4,
6801 0x13F4, 0x1444, 0x1494, 0x14E4, 0x1534, 0x1584, 0x0954, 0x09A4, 0x09F4,
6802 0x0A44, 0x0A94, 0x0AE4, 0x0B34, 0x0B84, 0x15D4, 0x1624, 0x1674, 0x16C4,
6803 0x1714, 0x1764, 0x0000, 0x0000, 0x0BD4, 0x0C24, 0x0C74, 0x0CC4, 0x0D14,
6804 0x0D64, 0x0000, 0x0000, 0x12B5, 0x1305, 0x1355, 0x13A5, 0x13F5, 0x1445,
6805 0x1495, 0x14E5, 0x0000, 0x0905, 0x0000, 0x09A5, 0x0000, 0x0A45, 0x0000,
6806 0x0AE5, 0x1675, 0x16C5, 0x1715, 0x1765, 0x1176, 0x11C6, 0x1216, 0x1266,
6807 0x0C75, 0x0CC5, 0x0D15, 0x0D65, 0x0776, 0x07C6, 0x0816, 0x0866, 0x12B6,
6808 0x1306, 0x1356, 0x13A6, 0x13F6, 0x1446, 0x1496, 0x14E6, 0x1536, 0x1586,
6809 0x15D6, 0x1626, 0x1676, 0x16C6, 0x0000, 0x0000, 0x1177, 0x11C7, 0x1217,
6810 0x1267, 0x12B7, 0x1307, 0x1357, 0x13A7, 0x0777, 0x07C7, 0x0817, 0x0867,
6811 0x08B7, 0x0907, 0x0957, 0x09A7, 0x13F7, 0x1447, 0x1497, 0x14E7, 0x1537,
6812 0x1587, 0x15D7, 0x1627, 0x09F7, 0x0A47, 0x0A97, 0x0AE7, 0x0B37, 0x0B87,
6813 0x0BD7, 0x0C27, 0x1677, 0x16C7, 0x1717, 0x1767, 0x1178, 0x11C8, 0x1218,
6814 0x1268, 0x0C77, 0x0CC7, 0x0D17, 0x0D67, 0x0778, 0x07C8, 0x0818, 0x0868,
6815 0x12B8, 0x1308, 0x1358, 0x13A8, 0x13F8, 0x0000, 0x1498, 0x14E8, 0x08B8,
6816 0x0908, 0x08B6, 0x0906, 0x09A8, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6817 0x1538, 0x1588, 0x15D8, 0x0000, 0x1678, 0x16C8, 0x0956, 0x09A6, 0x09F6,
6818 0x0A46, 0x0B88, 0x0000, 0x0000, 0x0000, 0x1718, 0x1768, 0x1179, 0x11C9,
6819 0x0000, 0x0000, 0x12B9, 0x1309, 0x0D18, 0x0D68, 0x0A96, 0x0AE6, 0x0000,
6820 0x0000, 0x0000, 0x0000, 0x13A9, 0x13F9, 0x1449, 0x1499, 0x14E9, 0x1539,
6821 0x1589, 0x15D9, 0x09A9, 0x09F9, 0x0BD6, 0x0C26, 0x0B39, 0x0000, 0x0000,
6822 0x0000, 0x0000, 0x0000, 0x16C9, 0x1719, 0x0000, 0x0000, 0x11CA, 0x121A,
6823 0x0B36, 0x0B86, 0x0C76, 0x0CC6, 0x0D19, 0x0000, 0x0000, 0x0000};
6824
6825 /* 2160-217F */
6826 static const uint16 uni_2160_217F[32] = {
6827 0x0739, 0x0789, 0x07D9, 0x0829, 0x0879, 0x08C9, 0x0919, 0x0969,
6828 0x09B9, 0x0A09, 0x0A59, 0x0AA9, 0x0AF9, 0x0B49, 0x0B99, 0x0BE9,
6829 0x1139, 0x1189, 0x11D9, 0x1229, 0x1279, 0x12C9, 0x1319, 0x1369,
6830 0x13B9, 0x1409, 0x1459, 0x14A9, 0x14F9, 0x1549, 0x1599, 0x15E9};
6831
6832 /* 24B0-24EF */
6833 static const uint16 uni_24B0_24EF[64] = {
6834 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0511, 0x0512,
6835 0x0513, 0x0514, 0x0515, 0x0516, 0x0517, 0x0518, 0x0519, 0x051A,
6836 0x051B, 0x051C, 0x051D, 0x051E, 0x051F, 0x0520, 0x0521, 0x0522,
6837 0x0523, 0x0524, 0x0525, 0x0526, 0x0527, 0x0528, 0x0529, 0x052A,
6838 0x0531, 0x0532, 0x0533, 0x0534, 0x0535, 0x0536, 0x0537, 0x0538,
6839 0x0539, 0x053A, 0x053B, 0x053C, 0x053D, 0x053E, 0x053F, 0x0540,
6840 0x0541, 0x0542, 0x0543, 0x0544, 0x0545, 0x0546, 0x0547, 0x0548,
6841 0x0549, 0x054A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
6842
6843 /* FF20-FF5F */
6844 static const uint16 uni_FF20_FF5F[64] = {
6845 0x0000, 0x0560, 0x05B0, 0x0600, 0x0650, 0x06A0, 0x06F0, 0x0740,
6846 0x0790, 0x07E0, 0x0830, 0x0880, 0x08D0, 0x0920, 0x0970, 0x09C0,
6847 0x0A10, 0x0A60, 0x0AB0, 0x0B00, 0x0B50, 0x0BA0, 0x0BF0, 0x0C40,
6848 0x0C90, 0x0CE0, 0x0D30, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
6849 0x0000, 0x0F60, 0x0FB0, 0x1000, 0x1050, 0x10A0, 0x10F0, 0x1140,
6850 0x1190, 0x11E0, 0x1230, 0x1280, 0x12D0, 0x1320, 0x1370, 0x13C0,
6851 0x1410, 0x1460, 0x14B0, 0x1500, 0x1550, 0x15A0, 0x15F0, 0x1640,
6852 0x1690, 0x16E0, 0x1730, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
6853
6854 /*
6855 Returns
6856 a number 0..15, if a valid HEX digit in lower case,
6857 -1 otherwise.
6858 */
6859
6860 3538576 static int hexlo(int x) {
6861 static signed char hex_lo_digit[256] = {
6862 -1, -1, -1, -1, -1, -1, -1, -1,
6863 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6864 -1, -1, -1, -1, -1, -1, -1, -1,
6865 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6866 -1, -1, -1, -1, -1, -1, -1, -1,
6867 -1, -1, -1, -1, -1, -1, -1, -1, /* !"#$%&'()*+,-./ */
6868 0, 1, 2, 3, 4, 5, 6, 7,
6869 8, 9, -1, -1, -1, -1, -1, -1, /* 0123456789:;<=>? */
6870 -1, -1, -1, -1, -1, -1, -1, -1,
6871 -1, -1, -1, -1, -1, -1, -1, -1, /* @ABCDEFGHIJKLMNO */
6872 -1, -1, -1, -1, -1, -1, -1, -1,
6873 -1, -1, -1, -1, -1, -1, -1, -1, /* PQRSTUVWXYZ[\]^_ */
6874 -1, 10, 11, 12, 13, 14, 15, -1,
6875 -1, -1, -1, -1, -1, -1, -1, -1, /* `abcdefghijklmno */
6876 -1, -1, -1, -1, -1, -1, -1, -1,
6877 -1, -1, -1, -1, -1, -1, -1, -1, /* pqrstuvwxyz{|}~. */
6878 -1, -1, -1, -1, -1, -1, -1, -1,
6879 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6880 -1, -1, -1, -1, -1, -1, -1, -1,
6881 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6882 -1, -1, -1, -1, -1, -1, -1, -1,
6883 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6884 -1, -1, -1, -1, -1, -1, -1, -1,
6885 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6886 -1, -1, -1, -1, -1, -1, -1, -1,
6887 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6888 -1, -1, -1, -1, -1, -1, -1, -1,
6889 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6890 -1, -1, -1, -1, -1, -1, -1, -1,
6891 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6892 -1, -1, -1, -1, -1, -1, -1, -1,
6893 -1, -1, -1, -1, -1, -1, -1, -1, /* ................ */
6894 };
6895 3538576 return hex_lo_digit[(unsigned int)x];
6896 }
6897
6898 /*
6899 Safe characters:
6900 '\0' NULL
6901 A..Z capital letters,
6902 a..z small letters
6903 0..9 digits
6904 _ underscore
6905 */
6906 static const char filename_safe_char[128] = {
6907 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
6908 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* ................ */
6909 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* !"#$%&'()*+,-./ */
6910 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 0123456789:;<=>? */
6911 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* @ABCDEFGHIJKLMNO */
6912 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* PQRSTUVWXYZ[\]^_ */
6913 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* `abcdefghijklmno */
6914 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* pqrstuvwxyz{|}~. */
6915 };
6916
6917 #define MY_FILENAME_ESCAPE '@'
6918
6919 extern "C" {
6920 400629254 static int my_mb_wc_filename(const CHARSET_INFO *cs [[maybe_unused]],
6921 my_wc_t *pwc, const uchar *s, const uchar *e) {
6922 int byte1, byte2;
6923
2/2
✓ Branch 0 taken 42394887 times.
✓ Branch 1 taken 358234367 times.
400629254 if (s >= e) return MY_CS_TOOSMALL;
6924
6925
3/4
✓ Branch 0 taken 358235273 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 356758632 times.
✓ Branch 3 taken 1476641 times.
358234367 if (*s < 128 && filename_safe_char[*s]) {
6926 356758632 *pwc = *s;
6927 356758632 return 1;
6928 }
6929
6930
2/2
✓ Branch 0 taken 581531 times.
✓ Branch 1 taken 894204 times.
1475735 if (*s != MY_FILENAME_ESCAPE) return MY_CS_ILSEQ;
6931
6932
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 894198 times.
894204 if (s + 3 > e) return MY_CS_TOOSMALL3;
6933
6934 894198 byte1 = s[1];
6935
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 894198 times.
894198 if (byte1 == 0) return MY_CS_ILSEQ; /* avoid possible out-of-bounds read */
6936 894198 byte2 = s[2];
6937
6938
5/8
✓ Branch 0 taken 895146 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 895146 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 895147 times.
✗ Branch 5 not taken.
✓ Branch 6 taken 895146 times.
✓ Branch 7 taken 1 times.
894198 if (byte1 >= 0x30 && byte1 <= 0x7F && byte2 >= 0x30 && byte2 <= 0x7F) {
6939 895146 int code = (byte1 - 0x30) * 80 + byte2 - 0x30;
6940
3/4
✓ Branch 0 taken 895146 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 10450 times.
✓ Branch 3 taken 884696 times.
895146 if (code < 5994 && touni[code]) {
6941 10450 *pwc = touni[code];
6942 10450 return 3;
6943 }
6944
3/4
✓ Branch 0 taken 50 times.
✓ Branch 1 taken 884646 times.
✓ Branch 2 taken 50 times.
✗ Branch 3 not taken.
884696 if (byte1 == '@' && byte2 == '@') {
6945 50 *pwc = 0;
6946 50 return 3;
6947 }
6948 }
6949
6950
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 883698 times.
883698 if (s + 4 > e) return MY_CS_TOOSMALL4;
6951
6952
4/6
✓ Branch 0 taken 884644 times.
✓ Branch 1 taken 1 times.
✓ Branch 2 taken 884646 times.
✗ Branch 3 not taken.
✓ Branch 4 taken 884646 times.
✗ Branch 5 not taken.
883698 if ((byte1 = hexlo(byte1)) >= 0 && (byte2 = hexlo(byte2)) >= 0) {
6953 884646 int byte3 = hexlo(s[3]);
6954 884647 int byte4 = hexlo(s[4]);
6955
3/4
✓ Branch 0 taken 884645 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 884647 times.
✗ Branch 3 not taken.
884647 if (byte3 >= 0 && byte4 >= 0) {
6956 884647 *pwc = (byte1 << 12) + (byte2 << 8) + (byte3 << 4) + byte4;
6957 884647 return 5;
6958 }
6959 }
6960
6961 return MY_CS_ILSEQ;
6962 }
6963
6964 90543183 static int my_wc_mb_filename(const CHARSET_INFO *cs [[maybe_unused]],
6965 my_wc_t wc, uchar *s, uchar *e) {
6966 int code;
6967 90543183 char hex[] = "0123456789abcdef";
6968
6969
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 90543183 times.
90543183 if (s >= e) return MY_CS_TOOSMALL;
6970
6971
4/4
✓ Branch 0 taken 90517648 times.
✓ Branch 1 taken 25535 times.
✓ Branch 2 taken 90299519 times.
✓ Branch 3 taken 218129 times.
90543183 if (wc < 128 && filename_safe_char[wc]) {
6972 90299519 *s = (uchar)wc;
6973 90299519 return 1;
6974 }
6975
6976
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 243664 times.
243664 if (s + 3 > e) return MY_CS_TOOSMALL3;
6977
6978 243664 *s++ = MY_FILENAME_ESCAPE;
6979
5/6
✓ Branch 0 taken 1234 times.
✓ Branch 1 taken 24156 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 1234 times.
✓ Branch 4 taken 24052 times.
✓ Branch 5 taken 218378 times.
243664 if ((wc >= 0x00C0 && wc <= 0x05FF && (code = uni_0C00_05FF[wc - 0x00C0])) ||
6980
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 24052 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 24022 times.
✓ Branch 5 taken 218408 times.
242430 (wc >= 0x1E00 && wc <= 0x1FFF && (code = uni_1E00_1FFF[wc - 0x1E00])) ||
6981
3/6
✗ Branch 0 not taken.
✓ Branch 1 taken 24022 times.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✓ Branch 4 taken 23941 times.
✓ Branch 5 taken 218489 times.
242430 (wc >= 0x2160 && wc <= 0x217F && (code = uni_2160_217F[wc - 0x2160])) ||
6982
7/10
✓ Branch 0 taken 25390 times.
✓ Branch 1 taken 218274 times.
✗ Branch 2 not taken.
✓ Branch 3 taken 23941 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
✓ Branch 6 taken 8784 times.
✓ Branch 7 taken 233646 times.
✓ Branch 8 taken 5577 times.
✓ Branch 9 taken 238087 times.
496112 (wc >= 0x24B0 && wc <= 0x24EF && (code = uni_24B0_24EF[wc - 0x24B0])) ||
6983
3/4
✓ Branch 0 taken 4343 times.
✓ Branch 1 taken 4441 times.
✓ Branch 2 taken 4343 times.
✗ Branch 3 not taken.
8784 (wc >= 0xFF20 && wc <= 0xFF5F && (code = uni_FF20_FF5F[wc - 0xFF20]))) {
6984 5577 *s++ = (code / 80) + 0x30;
6985 5577 *s++ = (code % 80) + 0x30;
6986 5577 return 3;
6987 }
6988
6989 /* Non letter */
6990
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 238087 times.
238087 if (s + 5 > e) return MY_CS_TOOSMALL5;
6991
6992 238087 *s++ = hex[(wc >> 12) & 15];
6993 238087 *s++ = hex[(wc >> 8) & 15];
6994 238087 *s++ = hex[(wc >> 4) & 15];
6995 238087 *s++ = hex[(wc)&15];
6996 238087 return 5;
6997 }
6998 } // extern "C"
6999
7000 static MY_COLLATION_HANDLER my_collation_filename_handler = {
7001 nullptr, /* init */
7002 nullptr,
7003 my_strnncoll_utf8mb3,
7004 my_strnncollsp_utf8mb3,
7005 my_strnxfrm_unicode,
7006 my_strnxfrmlen_utf8mb3,
7007 my_like_range_mb,
7008 my_wildcmp_utf8mb3,
7009 my_strcasecmp_utf8mb3,
7010 my_instr_mb,
7011 my_hash_sort_utf8mb3,
7012 my_propagate_complex};
7013
7014 static MY_CHARSET_HANDLER my_charset_filename_handler = {
7015 nullptr, /* init */
7016 my_ismbchar_utf8mb3,
7017 my_mbcharlen_utf8mb3,
7018 my_numchars_mb,
7019 my_charpos_mb3,
7020 my_well_formed_len_mb,
7021 my_lengthsp_8bit,
7022 my_numcells_mb,
7023 my_mb_wc_filename,
7024 my_wc_mb_filename,
7025 my_mb_ctype_mb,
7026 my_caseup_str_utf8mb3,
7027 my_casedn_str_utf8mb3,
7028 my_caseup_utf8mb3,
7029 my_casedn_utf8mb3,
7030 my_snprintf_8bit,
7031 my_long10_to_str_8bit,
7032 my_longlong10_to_str_8bit,
7033 my_fill_8bit,
7034 my_strntol_8bit,
7035 my_strntoul_8bit,
7036 my_strntoll_8bit,
7037 my_strntoull_8bit,
7038 my_strntod_8bit,
7039 my_strtoll10_8bit,
7040 my_strntoull10rnd_8bit,
7041 my_scan_8bit};
7042
7043 CHARSET_INFO my_charset_filename = {
7044 17,
7045 0,
7046 0, /* number */
7047 MY_CS_COMPILED | MY_CS_PRIMARY | MY_CS_STRNXFRM | MY_CS_UNICODE |
7048 MY_CS_HIDDEN | MY_CS_NONASCII,
7049 "filename", /* cs name */
7050 "filename", /* m_coll_name */
7051 "", /* comment */
7052 nullptr, /* tailoring */
7053 nullptr, /* coll_param */
7054 ctype_utf8mb3, /* ctype */
7055 to_lower_utf8mb3, /* to_lower */
7056 to_upper_utf8mb3, /* to_upper */
7057 to_upper_utf8mb3, /* sort_order */
7058 nullptr, /* uca */
7059 nullptr, /* tab_to_uni */
7060 nullptr, /* tab_from_uni */
7061 &my_unicase_default, /* caseinfo */
7062 nullptr, /* state_map */
7063 nullptr, /* ident_map */
7064 1, /* strxfrm_multiply */
7065 1, /* caseup_multiply */
7066 1, /* casedn_multiply */
7067 1, /* mbminlen */
7068 5, /* mbmaxlen */
7069 1, /* mbmaxlenlen */
7070 0, /* min_sort_char */
7071 0xFFFF, /* max_sort_char */
7072 ' ', /* pad char */
7073 false, /* escape_with_backslash_is_dangerous */
7074 1, /* levels_for_compare */
7075 &my_charset_filename_handler,
7076 &my_collation_filename_handler,
7077 PAD_SPACE};
7078
7079 /*
7080 We consider bytes with code more than 127 as a letter.
7081 This guarantees that word boundaries work fine with regular
7082 expressions. Note, there is no need to mark byte 255 as a
7083 letter, it is illegal byte in UTF8.
7084 */
7085 static const uchar ctype_utf8mb4[] = {
7086 0, 32, 32, 32, 32, 32, 32, 32, 32, 32, 40, 40, 40, 40, 40, 32,
7087 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
7088 32, 72, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
7089 16, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 16, 16, 16, 16, 16,
7090 16, 16, 129, 129, 129, 129, 129, 129, 1, 1, 1, 1, 1, 1, 1, 1,
7091 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 16, 16,
7092 16, 16, 130, 130, 130, 130, 130, 130, 2, 2, 2, 2, 2, 2, 2, 2,
7093 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 16, 16, 16, 16,
7094 32, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7095 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7096 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7097 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7098 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7099 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7100 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7101 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
7102 0};
7103
7104 static const uchar to_lower_utf8mb4[] = {
7105 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
7106 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
7107 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
7108 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
7109 60, 61, 62, 63, 64, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
7110 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
7111 122, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
7112 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
7113 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
7114 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
7115 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
7116 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
7117 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
7118 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
7119 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
7120 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
7121 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
7122 255};
7123
7124 static const uchar to_upper_utf8mb4[] = {
7125 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
7126 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
7127 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
7128 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
7129 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
7130 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
7131 90, 91, 92, 93, 94, 95, 96, 65, 66, 67, 68, 69, 70, 71, 72,
7132 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
7133 88, 89, 90, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
7134 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
7135 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
7136 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
7137 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
7138 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
7139 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
7140 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
7141 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
7142 255};
7143
7144 static inline int bincmp_utf8mb4(const uchar *s, const uchar *se,
7145 const uchar *t, const uchar *te) {
7146 int slen = (int)(se - s), tlen = (int)(te - t);
7147 int len = std::min(slen, tlen);
7148 int cmp = memcmp(s, t, len);
7149 return cmp ? cmp : slen - tlen;
7150 }
7151
7152 extern "C" {
7153
7154 /**
7155 A thunk to be able to use my_mb_wc_utf8mb3 in MY_CHARSET_HANDLER structs.
7156
7157 @param cs Unused.
7158 @param pwc [output] The parsed character, if any.
7159 @param s The string to read from.
7160 @param e The end of the string; will not read past this.
7161
7162 @return The number of bytes read from s, or a value <= 0 for failure
7163 (see m_ctype.h).
7164 */
7165 886439361 int my_mb_wc_utf8mb3_thunk(const CHARSET_INFO *cs [[maybe_unused]],
7166 my_wc_t *pwc, const uchar *s, const uchar *e) {
7167 886439361 return my_mb_wc_utf8mb3(pwc, s, e);
7168 }
7169
7170 /**
7171 A thunk to be able to use my_mb_wc_utf8mb4 in MY_CHARSET_HANDLER structs.
7172
7173 @param cs Unused.
7174 @param pwc [output] The parsed character, if any.
7175 @param s The string to read from.
7176 @param e The end of the string; will not read past this.
7177
7178 @return The number of bytes read from s, or a value <= 0 for failure
7179 (see m_ctype.h).
7180 */
7181
2/2
✓ Branch 0 taken 96086541 times.
✓ Branch 1 taken 5365443214 times.
5461529755 int my_mb_wc_utf8mb4_thunk(const CHARSET_INFO *cs [[maybe_unused]],
7182 my_wc_t *pwc, const uchar *s, const uchar *e) {
7183 5461529755 return my_mb_wc_utf8mb4(pwc, s, e);
7184 }
7185
7186 } // extern "C"
7187
7188 /*
7189 The same as above, but without range check
7190 for example, for a null-terminated string
7191 */
7192 147810206 static int my_mb_wc_utf8mb4_no_range(const CHARSET_INFO *cs [[maybe_unused]],
7193 my_wc_t *pwc, const uchar *s) {
7194 147810206 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/false, /*SUPPORT_MB4=*/true>(
7195 147810206 pwc, s, nullptr);
7196 }
7197
7198 extern "C" {
7199 1093724403 static int my_wc_mb_utf8mb4(const CHARSET_INFO *cs [[maybe_unused]], my_wc_t wc,
7200 uchar *r, uchar *e) {
7201 int count;
7202
7203
2/2
✓ Branch 0 taken 19 times.
✓ Branch 1 taken 1093724384 times.
1093724403 if (r >= e) return MY_CS_TOOSMALL;
7204
7205
2/2
✓ Branch 0 taken 787508374 times.
✓ Branch 1 taken 306216010 times.
1093724384 if (wc < 0x80)
7206 787508374 count = 1;
7207
2/2
✓ Branch 0 taken 909647 times.
✓ Branch 1 taken 305306363 times.
306216010 else if (wc < 0x800)
7208 909647 count = 2;
7209
2/2
✓ Branch 0 taken 17991171 times.
✓ Branch 1 taken 287315192 times.
305306365 else if (wc < 0x10000)
7210 17991171 count = 3;
7211
1/2
✓ Branch 0 taken 287315209 times.
✗ Branch 1 not taken.
287315194 else if (wc < 0x200000)
7212 287315209 count = 4;
7213 else
7214 return MY_CS_ILUNI;
7215
7216
2/2
✓ Branch 0 taken 111 times.
✓ Branch 1 taken 1093724290 times.
1093724401 if (r + count > e) return MY_CS_TOOSMALLN(count);
7217
7218
5/5
✓ Branch 0 taken 287315209 times.
✓ Branch 1 taken 17991072 times.
✓ Branch 2 taken 909635 times.
✓ Branch 3 taken 787508326 times.
✓ Branch 4 taken 48 times.
1093724290 switch (count) {
7219 287315209 case 4:
7220 287315209 r[3] = (uchar)(0x80 | (wc & 0x3f));
7221 287315209 wc = wc >> 6;
7222 287315209 wc |= 0x10000;
7223 [[fallthrough]];
7224 305306281 case 3:
7225 305306281 r[2] = (uchar)(0x80 | (wc & 0x3f));
7226 305306281 wc = wc >> 6;
7227 305306281 wc |= 0x800;
7228 [[fallthrough]];
7229 306215916 case 2:
7230 306215916 r[1] = (uchar)(0x80 | (wc & 0x3f));
7231 306215916 wc = wc >> 6;
7232 306215916 wc |= 0xc0;
7233 [[fallthrough]];
7234 1093724242 case 1:
7235 1093724242 r[0] = (uchar)wc;
7236 }
7237 1093724290 return count;
7238 }
7239 } // extern "C"
7240
7241 /*
7242 The same as above, but without range check.
7243 */
7244 147817181 static int my_wc_mb_utf8mb4_no_range(const CHARSET_INFO *cs [[maybe_unused]],
7245 my_wc_t wc, uchar *r) {
7246 int count;
7247
7248
1/2
✓ Branch 0 taken 147817856 times.
✗ Branch 1 not taken.
147817181 if (wc < 0x80)
7249 147817856 count = 1;
7250
1/2
✓ Branch 0 taken 88 times.
✗ Branch 1 not taken.
124 else if (wc < 0x800)
7251 88 count = 2;
7252
1/2
✓ Branch 0 taken 291 times.
✗ Branch 1 not taken.
36 else if (wc < 0x10000)
7253 291 count = 3;
7254 else if (wc < 0x200000)
7255 count = 4;
7256 else
7257 return MY_CS_ILUNI;
7258
7259
4/5
✗ Branch 0 not taken.
✓ Branch 1 taken 291 times.
✓ Branch 2 taken 88 times.
✓ Branch 3 taken 147816698 times.
✓ Branch 4 taken 1158 times.
147818235 switch (count) {
7260 case 4:
7261 r[3] = (uchar)(0x80 | (wc & 0x3f));
7262 wc = wc >> 6;
7263 wc |= 0x10000;
7264 [[fallthrough]];
7265 291 case 3:
7266 291 r[2] = (uchar)(0x80 | (wc & 0x3f));
7267 291 wc = wc >> 6;
7268 291 wc |= 0x800;
7269 [[fallthrough]];
7270 379 case 2:
7271 379 r[1] = (uchar)(0x80 | (wc & 0x3f));
7272 379 wc = wc >> 6;
7273 379 wc |= 0xc0;
7274 [[fallthrough]];
7275 147817077 case 1:
7276 147817077 r[0] = (uchar)wc;
7277 }
7278 147818235 return count;
7279 }
7280
7281 156753640 static inline void my_tolower_utf8mb4(const MY_UNICASE_INFO *uni_plane,
7282 my_wc_t *wc) {
7283
1/2
✓ Branch 0 taken 156757399 times.
✗ Branch 1 not taken.
156753640 if (*wc <= uni_plane->maxchar) {
7284 const MY_UNICASE_CHARACTER *page;
7285
2/2
✓ Branch 0 taken 155457836 times.
✓ Branch 1 taken 1299563 times.
156757399 if ((page = uni_plane->page[(*wc >> 8)])) *wc = page[*wc & 0xFF].tolower;
7286 }
7287 156753640 }
7288
7289 1395234 static inline void my_toupper_utf8mb4(const MY_UNICASE_INFO *uni_plane,
7290 my_wc_t *wc) {
7291
2/2
✓ Branch 0 taken 1395232 times.
✓ Branch 1 taken 2 times.
1395234 if (*wc <= uni_plane->maxchar) {
7292 const MY_UNICASE_CHARACTER *page;
7293
2/2
✓ Branch 0 taken 99242 times.
✓ Branch 1 taken 1295990 times.
1395232 if ((page = uni_plane->page[(*wc >> 8)])) *wc = page[*wc & 0xFF].toupper;
7294 }
7295 1395234 }
7296
7297 extern "C" {
7298 1318175 static size_t my_caseup_utf8mb4(const CHARSET_INFO *cs, char *src,
7299 size_t srclen, char *dst, size_t dstlen) {
7300 my_wc_t wc;
7301 int srcres, dstres;
7302 1318175 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
7303 1318175 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7304
2/4
✓ Branch 0 taken 1318175 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1318175 times.
1318175 assert(src != dst || cs->caseup_multiply == 1);
7305
7306
4/4
✓ Branch 0 taken 1395234 times.
✓ Branch 1 taken 1318098 times.
✓ Branch 2 taken 1395234 times.
✓ Branch 3 taken 1318098 times.
4108566 while ((src < srcend) &&
7307
1/2
✓ Branch 0 taken 1395234 times.
✗ Branch 1 not taken.
1395234 (srcres = my_mb_wc_utf8mb4(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
7308 1395234 my_toupper_utf8mb4(uni_plane, &wc);
7309
2/2
✓ Branch 0 taken 77 times.
✓ Branch 1 taken 1395157 times.
1395234 if ((dstres = my_wc_mb_utf8mb4(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
7310 77 break;
7311 1395157 src += srcres;
7312 1395157 dst += dstres;
7313 }
7314 1318175 return (size_t)(dst - dst0);
7315 }
7316
7317 122 static void my_hash_sort_utf8mb4(const CHARSET_INFO *cs, const uchar *s,
7318 size_t slen, uint64 *n1, uint64 *n2) {
7319 my_wc_t wc;
7320 int res;
7321 122 const uchar *e = s + slen;
7322 122 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7323 uint64 tmp1;
7324 uint64 tmp2;
7325 uint ch;
7326
7327 /*
7328 Remove end space. We do this to be able to compare
7329 'A ' and 'A' as identical
7330 */
7331
4/4
✓ Branch 0 taken 2993 times.
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 2879 times.
✓ Branch 3 taken 114 times.
3001 while (e > s && e[-1] == ' ') e--;
7332
7333 122 tmp1 = *n1;
7334 122 tmp2 = *n2;
7335
7336
2/2
✓ Branch 0 taken 1126 times.
✓ Branch 1 taken 122 times.
1370 while ((res = my_mb_wc_utf8mb4(&wc, s, e)) > 0) {
7337 1126 my_tosort_unicode(uni_plane, &wc, cs->state);
7338
7339 1126 ch = (wc & 0xFF);
7340 1126 tmp1 ^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
7341 1126 tmp2 += 3;
7342
7343 1126 ch = (wc >> 8) & 0xFF;
7344 1126 tmp1 ^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
7345 1126 tmp2 += 3;
7346
7347
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 1126 times.
1126 if (wc > 0xFFFF) {
7348 /*
7349 Put the highest byte only if it is non-zero,
7350 to make hash functions for utf8mb3 and utf8mb4
7351 compatible for BMP characters.
7352 This is useful to keep order of records in
7353 test results, e.g. for "SHOW GRANTS".
7354 */
7355 ch = (wc >> 16) & 0xFF;
7356 tmp1 ^= (((tmp1 & 63) + tmp2) * ch) + (tmp1 << 8);
7357 tmp2 += 3;
7358 }
7359 1126 s += res;
7360 }
7361
7362 122 *n1 = tmp1;
7363 122 *n2 = tmp2;
7364 122 }
7365
7366 static size_t my_caseup_str_utf8mb4(const CHARSET_INFO *cs, char *src) {
7367 my_wc_t wc;
7368 int srcres, dstres;
7369 char *dst = src, *dst0 = src;
7370 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7371 assert(cs->caseup_multiply == 1);
7372
7373 while (*src &&
7374 (srcres = my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *)src)) > 0) {
7375 my_toupper_utf8mb4(uni_plane, &wc);
7376 if ((dstres = my_wc_mb_utf8mb4_no_range(cs, wc, (uchar *)dst)) <= 0) break;
7377 src += srcres;
7378 dst += dstres;
7379 }
7380 *dst = '\0';
7381 return (size_t)(dst - dst0);
7382 }
7383
7384 1807277 static size_t my_casedn_utf8mb4(const CHARSET_INFO *cs, char *src,
7385 size_t srclen, char *dst, size_t dstlen) {
7386 my_wc_t wc;
7387 int srcres, dstres;
7388 1807277 char *srcend = src + srclen, *dstend = dst + dstlen, *dst0 = dst;
7389 1807277 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7390
2/4
✓ Branch 0 taken 1807277 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 1807277 times.
1807277 assert(src != dst || cs->casedn_multiply == 1);
7391
7392
4/4
✓ Branch 0 taken 8937623 times.
✓ Branch 1 taken 1807255 times.
✓ Branch 2 taken 8937622 times.
✓ Branch 3 taken 1807256 times.
19682501 while ((src < srcend) &&
7393
2/2
✓ Branch 0 taken 8937621 times.
✓ Branch 1 taken 2 times.
8937623 (srcres = my_mb_wc_utf8mb4(&wc, (uchar *)src, (uchar *)srcend)) > 0) {
7394 8937622 my_tolower_utf8mb4(uni_plane, &wc);
7395
2/2
✓ Branch 0 taken 22 times.
✓ Branch 1 taken 8937601 times.
8937620 if ((dstres = my_wc_mb_utf8mb4(cs, wc, (uchar *)dst, (uchar *)dstend)) <= 0)
7396 22 break;
7397 8937601 src += srcres;
7398 8937601 dst += dstres;
7399 }
7400 1807278 return (size_t)(dst - dst0);
7401 }
7402
7403 16529031 static size_t my_casedn_str_utf8mb4(const CHARSET_INFO *cs, char *src) {
7404 my_wc_t wc;
7405 int srcres, dstres;
7406 16529031 char *dst = src, *dst0 = src;
7407 16529031 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7408
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 16529031 times.
16529031 assert(cs->casedn_multiply == 1);
7409
7410
4/4
✓ Branch 0 taken 147811611 times.
✓ Branch 1 taken 16531771 times.
✓ Branch 2 taken 147813322 times.
✓ Branch 3 taken 16530744 times.
312155677 while (*src &&
7411
2/4
✓ Branch 0 taken 147812295 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 147813047 times.
✗ Branch 3 not taken.
147811611 (srcres = my_mb_wc_utf8mb4_no_range(cs, &wc, (uchar *)src)) > 0) {
7412 147813322 my_tolower_utf8mb4(uni_plane, &wc);
7413
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 147814351 times.
147816251 if ((dstres = my_wc_mb_utf8mb4_no_range(cs, wc, (uchar *)dst)) <= 0) break;
7414 147814351 src += srcres;
7415 147814351 dst += dstres;
7416 }
7417
7418 /*
7419 In rare cases lower string can be shorter than
7420 the original string, for example:
7421
7422 "U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE"
7423 (which is 0xC4B0 in utf8, i.e. two bytes)
7424
7425 is converted into
7426
7427 "U+0069 LATIN SMALL LETTER I"
7428 (which is 0x69 in utf8, i.e. one byte)
7429
7430 So, we need to put '\0' terminator after converting.
7431 */
7432
7433 16530744 *dst = '\0';
7434 16530744 return (size_t)(dst - dst0);
7435 }
7436
7437 9 static int my_strnncoll_utf8mb4(const CHARSET_INFO *cs, const uchar *s,
7438 size_t slen, const uchar *t, size_t tlen,
7439 bool t_is_prefix) {
7440 9 my_wc_t s_wc = 0;
7441 9 my_wc_t t_wc = 0;
7442 9 const uchar *se = s + slen;
7443 9 const uchar *te = t + tlen;
7444 9 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7445
7446
3/4
✓ Branch 0 taken 12 times.
✗ Branch 1 not taken.
✓ Branch 2 taken 9 times.
✓ Branch 3 taken 3 times.
12 while (s < se && t < te) {
7447
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 9 times.
9 int s_res = my_mb_wc_utf8mb4(&s_wc, s, se);
7448 9 int t_res = my_mb_wc_utf8mb4(&t_wc, t, te);
7449
7450
2/4
✓ Branch 0 taken 9 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 9 times.
9 if (s_res <= 0 || t_res <= 0) {
7451 /* Incorrect string, compare bytewise */
7452 return bincmp_utf8mb4(s, se, t, te);
7453 }
7454
7455 9 my_tosort_unicode(uni_plane, &s_wc, cs->state);
7456 9 my_tosort_unicode(uni_plane, &t_wc, cs->state);
7457
7458
2/2
✓ Branch 0 taken 6 times.
✓ Branch 1 taken 3 times.
9 if (s_wc != t_wc) {
7459
2/2
✓ Branch 0 taken 3 times.
✓ Branch 1 taken 3 times.
6 return s_wc > t_wc ? 1 : -1;
7460 }
7461
7462 3 s += s_res;
7463 3 t += t_res;
7464 }
7465
1/2
✓ Branch 0 taken 3 times.
✗ Branch 1 not taken.
3 return (int)(t_is_prefix ? (t - te) : ((se - s) - (te - t)));
7466 }
7467
7468 /**
7469
7470 Compare strings, discarding end space
7471
7472 If one string is shorter as the other, then we space extend the other
7473 so that the strings have equal length.
7474
7475 This will ensure that the following things hold:
7476
7477 "a" == "a "
7478 "a\0" < "a"
7479 "a\0" < "a "
7480
7481 @param cs Character set pinter.
7482 @param s First string to compare.
7483 @param slen Length of 's'.
7484 @param t Second string to compare.
7485 @param tlen Length of 't'.
7486
7487 @return Comparison result.
7488 @retval Negative number, if a less than b.
7489 @retval 0, if a is equal to b
7490 @retval Positive number, if a > b
7491 */
7492
7493 5533 static int my_strnncollsp_utf8mb4(const CHARSET_INFO *cs, const uchar *s,
7494 size_t slen, const uchar *t, size_t tlen) {
7495 int res;
7496 5533 my_wc_t s_wc = 0;
7497 5533 my_wc_t t_wc = 0;
7498 5533 const uchar *se = s + slen, *te = t + tlen;
7499 5533 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7500
7501
4/4
✓ Branch 0 taken 19836 times.
✓ Branch 1 taken 2214 times.
✓ Branch 2 taken 19782 times.
✓ Branch 3 taken 54 times.
22050 while (s < se && t < te) {
7502
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 19782 times.
19782 int s_res = my_mb_wc_utf8mb4(&s_wc, s, se);
7503 19782 int t_res = my_mb_wc_utf8mb4(&t_wc, t, te);
7504
7505
2/4
✓ Branch 0 taken 19782 times.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✓ Branch 3 taken 19782 times.
19782 if (s_res <= 0 || t_res <= 0) {
7506 /* Incorrect string, compare bytewise */
7507 return bincmp_utf8mb4(s, se, t, te);
7508 }
7509
7510 19782 my_tosort_unicode(uni_plane, &s_wc, cs->state);
7511 19782 my_tosort_unicode(uni_plane, &t_wc, cs->state);
7512
7513
2/2
✓ Branch 0 taken 3265 times.
✓ Branch 1 taken 16517 times.
19782 if (s_wc != t_wc) {
7514
2/2
✓ Branch 0 taken 1161 times.
✓ Branch 1 taken 2104 times.
3265 return s_wc > t_wc ? 1 : -1;
7515 }
7516
7517 16517 s += s_res;
7518 16517 t += t_res;
7519 }
7520
7521 2268 slen = (size_t)(se - s);
7522 2268 tlen = (size_t)(te - t);
7523 2268 res = 0;
7524
7525
2/2
✓ Branch 0 taken 93 times.
✓ Branch 1 taken 2175 times.
2268 if (slen != tlen) {
7526 93 int swap = 1;
7527
2/2
✓ Branch 0 taken 39 times.
✓ Branch 1 taken 54 times.
93 if (slen < tlen) {
7528 39 slen = tlen;
7529 39 s = t;
7530 39 se = te;
7531 39 swap = -1;
7532 39 res = -res;
7533 }
7534 /*
7535 This following loop uses the fact that in UTF-8
7536 all multibyte characters are greater than space,
7537 and all multibyte head characters are greater than
7538 space. It means if we meet a character greater
7539 than space, it always means that the longer string
7540 is greater. So we can reuse the same loop from the
7541 8bit version, without having to process full multibute
7542 sequences.
7543 */
7544
2/2
✓ Branch 0 taken 764 times.
✓ Branch 1 taken 50 times.
814 for (; s < se; s++) {
7545
4/4
✓ Branch 0 taken 43 times.
✓ Branch 1 taken 721 times.
✓ Branch 2 taken 6 times.
✓ Branch 3 taken 37 times.
764 if (*s != ' ') return (*s < ' ') ? -swap : swap;
7546 }
7547 }
7548 2225 return res;
7549 }
7550 } // extern "C"
7551
7552 /**
7553 Compare 0-terminated UTF8 strings.
7554
7555 @param cs character set handler
7556 @param s First 0-terminated string to compare
7557 @param t Second 0-terminated string to compare
7558
7559 @return Comparison result.
7560 @retval negative number if s < t
7561 @retval positive number if s > t
7562 @retval 0 is the strings are equal
7563 */
7564
7565 extern "C" {
7566 16606 static int my_strcasecmp_utf8mb4(const CHARSET_INFO *cs, const char *s,
7567 const char *t) {
7568 16606 const MY_UNICASE_INFO *uni_plane = cs->caseinfo;
7569
3/4
✓ Branch 0 taken 37478 times.
✓ Branch 1 taken 10436 times.
✓ Branch 2 taken 37478 times.
✗ Branch 3 not taken.
47914 while (s[0] && t[0]) {
7570 my_wc_t s_wc, t_wc;
7571
7572
1/2
✓ Branch 0 taken 37478 times.
✗ Branch 1 not taken.
37478 if ((uchar)s[0] < 128) {
7573 /*
7574 s[0] is between 0 and 127.
7575 It represents a single byte character.
7576 Convert it into weight according to collation.
7577 */
7578 37478 s_wc = plane00[(uchar)s[0]].tolower;
7579 37478 s++;
7580 } else {
7581 int res = my_mb_wc_utf8mb4_no_range(cs, &s_wc, (const uchar *)s);
7582
7583 /*
7584 In the case of wrong multibyte sequence we will
7585 call strcmp() for byte-to-byte comparison.
7586 */
7587
0/2
✗ Branch 0 not taken.
✗ Branch 1 not taken.
6170 if (res <= 0) return strcmp(s, t);
7588 s += res;
7589
7590 my_tolower_utf8mb4(uni_plane, &s_wc);
7591 }
7592
7593 /* Do the same for the second string */
7594
7595
1/2
✓ Branch 0 taken 37478 times.
✗ Branch 1 not taken.
37478 if ((uchar)t[0] < 128) {
7596 /* Convert single byte character into weight */
7597 37478 t_wc = plane00[(uchar)t[0]].tolower;
7598 37478 t++;
7599 } else {
7600 int res = my_mb_wc_utf8mb4_no_range(cs, &t_wc, (const uchar *)t);
7601 if (res <= 0) return strcmp(s, t);
7602 t += res;
7603
7604 my_tolower_utf8mb4(uni_plane, &t_wc);
7605 }
7606
7607 /* Now we have two weights, let's compare them */
7608
2/2
✓ Branch 0 taken 6170 times.
✓ Branch 1 taken 31308 times.
37478 if (s_wc != t_wc) return ((int)s_wc) - ((int)t_wc);
7609 }
7610 10436 return ((int)(uchar)s[0]) - ((int)(uchar)t[0]);
7611 }
7612
7613 126 static int my_wildcmp_utf8mb4(const CHARSET_INFO *cs, const char *str,
7614 const char *strend, const char *wildstr,
7615 const char *wildend, int escape, int w_one,
7616 int w_many) {
7617 252 return my_wildcmp_unicode(cs, str, strend, wildstr, wildend, escape, w_one,
7618 126 w_many, cs->caseinfo);
7619 }
7620
7621 28073 static size_t my_strnxfrmlen_utf8mb4(const CHARSET_INFO *cs [[maybe_unused]],
7622 size_t len) {
7623 // We really ought to have len % 4 == 0, but not all calling code conforms.
7624 28073 return ((len + 3) / 4) * 2;
7625 }
7626 } // extern "C"
7627
7628 static ALWAYS_INLINE int my_valid_mbcharlen_utf8mb4(const CHARSET_INFO *cs
7629 [[maybe_unused]],
7630 const uchar *s,
7631 const uchar *e) {
7632 my_wc_t wc; // Ignored.
7633 28741686404 return my_mb_wc_utf8_prototype</*RANGE_CHECK=*/true, /*SUPPORT_MB4=*/true>(
7634 57483372808 &wc, s, e);
7635 }
7636
7637 extern "C" {
7638 287082014 static size_t my_well_formed_len_utf8mb4(const CHARSET_INFO *cs, const char *b,
7639 const char *e, size_t pos,
7640 int *error) {
7641 287082014 const char *b_start = b;
7642 287082014 *error = 0;
7643
2/2
✓ Branch 0 taken 15550972033 times.
✓ Branch 1 taken 85829470 times.
15636801503 while (pos) {
7644 int mb_len;
7645
7646 15550972033 if ((mb_len = my_valid_mbcharlen_utf8mb4(cs, pointer_cast<const uchar *>(b),
7647
2/2
✓ Branch 0 taken 243896452 times.
✓ Branch 1 taken 15349719489 times.
15593615941 pointer_cast<const uchar *>(e))) <=
7648 0) {
7649
2/2
✓ Branch 0 taken 4282 times.
✓ Branch 1 taken 243892170 times.
243896452 *error = b < e ? 1 : 0;
7650 243896452 break;
7651 }
7652 15349719489 b += mb_len;
7653 15349719489 pos--;
7654 }
7655 329725922 return (size_t)(b - b_start);
7656 }
7657
7658 static uint ALWAYS_INLINE my_ismbchar_utf8mb4_inl(const CHARSET_INFO *cs,
7659 const char *b,
7660 const char *e) {
7661 13148070463 int res = my_valid_mbcharlen_utf8mb4(cs, (const uchar *)b, (const uchar *)e);
7662
4/4
✓ Branch 0 taken 292943 times.
✓ Branch 1 taken 224108096 times.
✓ Branch 2 taken 518969 times.
✓ Branch 3 taken 12923150455 times.
13148070463 return (res > 1) ? res : 0;
7663 }
7664
7665
1/2
✗ Branch 0 not taken.
✓ Branch 1 taken 12923669424 times.
12923669424 static uint my_ismbchar_utf8mb4(const CHARSET_INFO *cs, const char *b,
7666 const char *e) {
7667 12923669424 return my_ismbchar_utf8mb4_inl(cs, b, e);
7668 }
7669
7670 62510383 size_t my_charpos_mb4(const CHARSET_INFO *cs, const char *pos, const char *end,
7671 size_t length) {
7672 // Fast path as long as we see ASCII characters only.
7673 62510383 size_t min_length = std::min<size_t>(end - pos, length);
7674 const char *safe_end =
7675 62510387 std::min(end, pos + min_length) - std::min<size_t>(7, min_length);
7676 62510387 const char *start = pos;
7677
2/2
✓ Branch 0 taken 895372534 times.
✓ Branch 1 taken 62362108 times.
957734642 while (pos < safe_end) {
7678 uint64_t data;
7679 895372534 memcpy(&data, pos, sizeof(data));
7680
2/2
✓ Branch 0 taken 148279 times.
✓ Branch 1 taken 895224255 times.
895372534 if (data & 0x8080808080808080ULL) break;
7681 895224255 pos += sizeof(data);
7682 895224255 length -= sizeof(data);
7683 }
7684
7685
4/4
✓ Branch 0 taken 231794790 times.
✓ Branch 1 taken 55116636 times.
✓ Branch 2 taken 224401039 times.
✓ Branch 3 taken 7393751 times.
286911426 while (length && pos < end) {
7686 uint mb_len;
7687
3/4
✗ Branch 0 not taken.
✓ Branch 1 taken 224401039 times.
✓ Branch 2 taken 292943 times.
✓ Branch 3 taken 224108096 times.
448802078 pos += (mb_len = my_ismbchar_utf8mb4_inl(cs, pos, end)) ? mb_len : 1;
7688 224401039 length--;
7689 }
7690
2/2
✓ Branch 0 taken 7393759 times.
✓ Branch 1 taken 55116628 times.
62510387 return (size_t)(length ? end + 2 - start : pos - start);
7691 }
7692
7693 19283398662 static uint my_mbcharlen_utf8mb4(const CHARSET_INFO *cs [[maybe_unused]],
7694 uint c) {
7695
2/2
✓ Branch 0 taken 19144013117 times.
✓ Branch 1 taken 139385545 times.
19283398662 if (c < 0x80) return 1;
7696
2/2
✓ Branch 0 taken 71281120 times.
✓ Branch 1 taken 68104425 times.
139385545 if (c < 0xc2) return 0; /* Illegal mb head */
7697
2/2
✓ Branch 0 taken 32412462 times.
✓ Branch 1 taken 35691963 times.
68104425 if (c < 0xe0) return 2;
7698
2/2
✓ Branch 0 taken 17328092 times.
✓ Branch 1 taken 18363871 times.
35691963 if (c < 0xf0) return 3;
7699
2/2
✓ Branch 0 taken 8642936 times.
✓ Branch 1 taken 9720935 times.
18363871 if (c < 0xf8) return 4;
7700 9720935 return 0; /* Illegal mb head */
7701 ;
7702 }
7703 } // extern "C"
7704
7705 static MY_COLLATION_HANDLER my_collation_utf8mb4_general_ci_handler = {
7706 nullptr, /* init */
7707 nullptr,
7708 my_strnncoll_utf8mb4,
7709 my_strnncollsp_utf8mb4,
7710 my_strnxfrm_unicode,
7711 my_strnxfrmlen_utf8mb4,
7712 my_like_range_mb,
7713 my_wildcmp_utf8mb4,
7714 my_strcasecmp_utf8mb4,
7715 my_instr_mb,
7716 my_hash_sort_utf8mb4,
7717 my_propagate_complex};
7718
7719 static MY_COLLATION_HANDLER my_collation_utf8mb4_bin_handler = {
7720 nullptr, /* init */
7721 nullptr,
7722 my_strnncoll_mb_bin,
7723 my_strnncollsp_mb_bin,
7724 my_strnxfrm_unicode_full_bin,
7725 my_strnxfrmlen_unicode_full_bin,
7726 my_like_range_mb,
7727 my_wildcmp_mb_bin,
7728 my_strcasecmp_mb_bin,
7729 my_instr_mb,
7730 my_hash_sort_mb_bin,
7731 my_propagate_simple};
7732
7733 MY_CHARSET_HANDLER my_charset_utf8mb4_handler = {nullptr, /* init */
7734 my_ismbchar_utf8mb4,
7735 my_mbcharlen_utf8mb4,
7736 my_numchars_mb,
7737 my_charpos_mb4,
7738 my_well_formed_len_utf8mb4,
7739 my_lengthsp_8bit,
7740 my_numcells_mb,
7741 my_mb_wc_utf8mb4_thunk,
7742 my_wc_mb_utf8mb4,
7743 my_mb_ctype_mb,
7744 my_caseup_str_utf8mb4,
7745 my_casedn_str_utf8mb4,
7746 my_caseup_utf8mb4,
7747 my_casedn_utf8mb4,
7748 my_snprintf_8bit,
7749 my_long10_to_str_8bit,
7750 my_longlong10_to_str_8bit,
7751 my_fill_8bit,
7752 my_strntol_8bit,
7753 my_strntoul_8bit,
7754 my_strntoll_8bit,
7755 my_strntoull_8bit,
7756 my_strntod_8bit,
7757 my_strtoll10_8bit,
7758 my_strntoull10rnd_8bit,
7759 my_scan_8bit};
7760
7761 CHARSET_INFO my_charset_utf8mb4_general_ci = {
7762 45,
7763 0,
7764 0, /* number */
7765 MY_CS_COMPILED | MY_CS_STRNXFRM | MY_CS_UNICODE |
7766 MY_CS_UNICODE_SUPPLEMENT, /* state */
7767 MY_UTF8MB4, /* cs name */
7768 MY_UTF8MB4_GENERAL_CI, /* m_coll_name */
7769 "UTF-8 Unicode", /* comment */
7770 nullptr, /* tailoring */
7771 nullptr, /* coll_param */
7772 ctype_utf8mb4, /* ctype */
7773 to_lower_utf8mb4, /* to_lower */
7774 to_upper_utf8mb4, /* to_upper */
7775 to_upper_utf8mb4, /* sort_order */
7776 nullptr, /* uca */
7777 nullptr, /* tab_to_uni */
7778 nullptr, /* tab_from_uni */
7779 &my_unicase_default, /* caseinfo */
7780 nullptr, /* state_map */
7781 nullptr, /* ident_map */
7782 1, /* strxfrm_multiply */
7783 1, /* caseup_multiply */
7784 1, /* casedn_multiply */
7785 1, /* mbminlen */
7786 4, /* mbmaxlen */
7787 1, /* mbmaxlenlen */
7788 0, /* min_sort_char */
7789 0xFFFF, /* max_sort_char */
7790 ' ', /* pad char */
7791 false, /* escape_with_backslash_is_dangerous */
7792 1, /* levels_for_compare */
7793 &my_charset_utf8mb4_handler,
7794 &my_collation_utf8mb4_general_ci_handler,
7795 PAD_SPACE};
7796
7797 CHARSET_INFO my_charset_utf8mb4_bin = {
7798 46,
7799 0,
7800 0, /* number */
7801 MY_CS_COMPILED | MY_CS_BINSORT | MY_CS_STRNXFRM | MY_CS_UNICODE |
7802 MY_CS_UNICODE_SUPPLEMENT, /* state */
7803 MY_UTF8MB4, /* cs name */
7804 MY_UTF8MB4_BIN, /* m_coll_name */
7805 "UTF-8 Unicode", /* comment */
7806 nullptr, /* tailoring */
7807 nullptr, /* coll_param */
7808 ctype_utf8mb4, /* ctype */
7809 to_lower_utf8mb4, /* to_lower */
7810 to_upper_utf8mb4, /* to_upper */
7811 nullptr, /* sort_order */
7812 nullptr, /* uca */
7813 nullptr, /* tab_to_uni */
7814 nullptr, /* tab_from_uni */
7815 &my_unicase_default, /* caseinfo */
7816 nullptr, /* state_map */
7817 nullptr, /* ident_map */
7818 1, /* strxfrm_multiply */
7819 1, /* caseup_multiply */
7820 1, /* casedn_multiply */
7821 1, /* mbminlen */
7822 4, /* mbmaxlen */
7823 1, /* mbmaxlenlen */
7824 0, /* min_sort_char */
7825 0xFFFF, /* max_sort_char */
7826 ' ', /* pad char */
7827 false, /* escape_with_backslash_is_dangerous */
7828 1, /* levels_for_compare */
7829 &my_charset_utf8mb4_handler,
7830 &my_collation_utf8mb4_bin_handler,
7831 PAD_SPACE};
7832